我怀疑 ?Prolog 的主要实现 teyjus 可能有点被遗弃,但是 ?Prolog 是一个迷人的 Prolog,它应该让你使用高阶逻辑、假设推理和其他东西,这就是为什么我尝试使用它。
文件“example.sig”:
sig example.
kind person, language type.
type hans person.
type german, french, italian language.
type grade person -> o.
type take person -> language -> o.
Run Code Online (Sandbox Code Playgroud)
文件“example.mod”:
module example.
(grade P) :- (take P german), (take P french).
(grade P) :- (take P german), (take P italian).
take hans french.
Run Code Online (Sandbox Code Playgroud)
但是,当我编译和加载它时,虽然它似乎可以工作,但假设的推理查询被拒绝:
[example] ?- take X Y.
The answer substitution:
Y = french
X = hans
More solutions (y/n)? y
no (more) …Run Code Online (Sandbox Code Playgroud) Curry与它的堂兄 Haskell 不同,它允许您为一个函数赋予多个值:
foo 1 2 = 3
foo 1 2 = 4
Run Code Online (Sandbox Code Playgroud)
它确实回溯(或其他一些搜索)来探索这种非确定性的影响。
这使它类似于 Prolog(特别是?Prolog由于类型系统和语法),您可以在其中声明
foo 1 2 3.
foo 1 2 4.
Run Code Online (Sandbox Code Playgroud)
在语义上,N 元Curry 函数和N+1 元Prolog 关系之间有什么区别吗?
functional-programming prolog logic-programming curry lambda-prolog