prolog - 将 Prolog 代码翻译成 Lisp

标签 prolog lisp common-lisp

<分区>

Prolog 和 Lisp 都被认为是 AI 编程语言。以下 Prolog 代码的 Lisp 等价物是什么,它根据给定的父子关系搜索 sibling :

father_child(tom, sally).
father_child(john, alfred).
father_child(george, peter).
father_child(tom, dick).
father_child(john, harry).
father_child(george, eliz).

siblings(X, Y):-  father_child(Z, X), father_child(Z, Y), X \= Y.   

?- siblings(harry,X).
X = alfred ;

编辑:这个问题不是太宽泛,而是关于将这个特定代码转换为 Lisp 的问题。因此,我应该重新打开它。

最佳答案

Lisp 是一种函数式编程语言(或者更确切地说,是具有纯函数子集的命令式语言),因此 Prolog 支持的关系编程不会延续到Lisp,至少不是直接的,因为函数只是关系的特例并且可以很容易地表达,而用函数表达关系则更为复杂。

最值得注意的是,一个函数只能在一个方向工作,因此您不能指望直接使用 Lisp 来回答更一般的情况,而这些情况使用 Prolog 很容易实现。

此外,使用 而不是不太通用的 (\=)/2father_child/2 是一个很好的关系名称,可以清楚地表明每个参数是什么。

Prolog 和 Lisp 都被视为人工智能编程语言,就像布加迪和福特都被视为汽车制造商一样。

关于prolog - 将 Prolog 代码翻译成 Lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205637/

相关文章:

emacs - 如何在 Common Lisp 中隐藏(读取)输出

graph - 在 Common Lisp 中表示有向无环图

lisp - 如何在 Common Lisp 中加载库?

data-structures - prolog中的哈希表

list - Prolog 成员实现

prolog - 在 Prolog 中制表,什么时候存储值?

parameters - Prolog 将谓词统一为参数

function - Lisp 标签函数在使用前被删除

clojure - Lisp/Clojure DSL 的中间表示

lisp - 列表作为 Lisp 中的函数参数