问题标签 [curry]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - 哪个更有趣或更强大:Curry、Mercury 或 Lambda-Prolog?
我想问你从头开始/逆向工程实现什么正式系统会更有趣。
我浏览了一些现有的和开源的逻辑/声明式编程系统项目。我决定在空闲时间编造一些类似的东西,或者至少要掌握实施的总体思路。
如果其中一些系统能够提供现代学术研究逻辑及其与计算模型的关系的大部分表达能力和简洁性,那就太好了。
你会建议至少在概念层面学习什么?例如,Lambda-Prolog 很有趣,特别是因为它允许更高阶的关系,但 AFAIK 是基于直觉主义逻辑的,因此缺乏排中原则;这对我来说通常是一个缺点。
我也欢迎任何关于不太流行但更具表现力/功能强大的现代逻辑编程系统的建议。
type-systems - 什么类型的系统可以防止逻辑语言中的目标暂停?
从咖喱教程的第 3.13.3 节:
剩余的操作称为刚性操作,而狭窄的操作称为灵活操作。所有定义的操作都是灵活的,而大多数原始操作,如算术操作,都是刚性的,因为猜测对它们来说不是一个合理的选择。例如,前奏定义了一个列表连接操作,如下所示:
由于操作“++”是灵活的,我们可以使用它来搜索满足特定属性的列表:
另一方面,像加法“+”这样的预定义算术运算是刚性的。因此,使用逻辑变量作为参数调用“+”会失败:
库里似乎并没有提防写将被暂停的目标。什么类型的系统可以提前检测目标是否将被暂停?
list - 为什么 Curry 的标准库中的非确定性选择函数没有直接定义,而是使用辅助 2 参数函数定义?
考虑Curry 编程语言choose
中的一个函数,其规范是“非确定性地从列表中选择一个元素”。(choose xs)
xs
我将通过两个替代的非确定性规则直接实现它:
但是在Muenster Curry Compiler的 /usr/lib/curry-0.9.11/Success.curry 中,它是使用辅助函数定义的:
编译器提供的模块的定义有什么优点(如果有的话)?这两个定义是否完全等效(即使在一些具有不确定性和未定义值的棘手情况下)?..在某些情况下其中一个更有效吗?
补充:更深层次的考虑
cthom06(谢谢!)已正确指出我的定义会导致在更多情况下达到未定义的值(因为我们会尝试在每次“顶级”调用时使用空列表参数调用此函数一次非空列表参数)。(嗯,为什么我没有马上注意到这个考虑?..)那效率较低。
但我想知道:有任何语义差异吗?在某些棘手的情况下,差异可能很重要吗?
我们看到两个定义之间的差异——在非空列表的情况下——基本上归结为两个潜在定义之间的差异id
:
我的定义就像定义id
为:
他们的定义就像定义id
正常的方式:
(因此,这里的直截了当。)
在哪些情况下它可能很重要?
recursion - “foop”:命名约定?它是“foo”的辅助递归函数;后缀“p”是什么意思?
我遇到了以下代码片段(函数定义):
在“标准库”中的Curry 编程语言中——/usr/lib/curry-0.9.11/Success.curry 来自Muenster Curry Compiler。这里:
和
辅助递归函数的“p”后缀choosep
是已知的命名约定吗?也许它来自函数式编程传统(Haskell)或逻辑编程(Prolog?)。那是什么意思呢?
console - 库里的“readline”(或“haskline”)?
用Curry 编程语言编写程序的最实用方法是什么,该程序将具有带有不错的行编辑的控制台 UI?
实际上,我需要传递一个字符串作为用户输入的建议,然后让用户在控制台中编辑它,并接收他编辑的变体,处理它(写到进程的当前状态),然后循环。
我喜欢类似 readline/haskline 的编辑。(顺便说一句, haskline在其最新版本(0.6.4.0)中具有我想要的 API:读取带有建议初始值的行—— getInputLineWithInitial
:
此函数的行为方式与 完全相同
getInputLine
,只是它预先填充了输入区域。驻留在输入区域中的文本以带有两个字符串的 2 元组形式给出。元组左侧的字符串是光标左侧的字符串,右侧的字符串是光标右侧的字符串。
)
如何以最实用的方式获得 Curry 程序所需的功能(我的意思是,我不想在 Curry 中为控制台编辑操作编写新代码,而是可能使用库、包装器或 FFI) ?
show - 在 Curry 中显示数据类型
Curry是否能够在 REPL 中显示或漂亮地打印数据类型(使用PAKCS或MCC)?在 Haskell 中,此功能是使用类型 classShow
实现的。但是,没有维护的 Curry 实现实现类型类。浏览一下 PAKCS 库,似乎没有为用户提供规范的抽象数据类型来与之交互,但是有几个定义了单独的函数来漂亮地打印它们。
作为参考,我正在为个人项目实现几种抽象数据类型。因为我无意将代码打包成带有交互式用户界面的编译程序,所以近似于 Haskell 的show
功能会很方便。
functional-programming - 函数返回“No Solution”而不是“Nothing”
我有一个表示谓词逻辑公式的标准数据类型。表示析取的自然演绎消除规则的函数可能如下所示:
当统一失败时,该函数不会评估为 Nothing,而是在 中不返回任何解决方案PACKS
:
我错过了什么,为什么在统一失败时不el
评估?Nothing
haskell - 整个 Haskell 会成为 Curry 的一部分吗?
我在维基百科上找到了咖喱。它说库里几乎是一个超集,但不是因为缺少什么。
我希望看到它支持整个 Haskell。他们是否计划将 Haskell 作为 Curry 的一部分实施?
haskell - 咖喱编译器锌无法配置
当我配置咖喱的编译器锌时,我得到了这个:
那么什么是 IOExts?我在哪里可以找到它?
logic-programming - 如何限制 Curry 中的搜索空间?
下面是我在 Curry 中的第一个程序。它打印达到所需解决方案所需的步骤序列(穿过关闭的门)。
我怎样才能让它在寻找时终止Impossible
?我正在使用 Kics2 0.3.1。