Prolog和Lisp都被认为是人工智能编程的语言。什么是Lisp相当于跟随Prolog代码,它根据给定的父子关系搜索兄弟姐妹:
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。因此,我应该重新开放。
答案 0 :(得分:3)
Lisp是一种功能性编程语言(或者更确切地说,是具有纯功能子集的命令式语言),因此Prolog启用的关系编程不会延续到Lisp,至少不是直接的,因为函数只是一个关系的特殊情况并且可以很容易地表达,而在函数方面表达关系则更为复杂。
最值得注意的是,一个函数只能在一个方向中运行,所以你不能期望直接使用Lisp来回答Prolog很容易实现的更多一般情况。
另外,使用 prolog-dif 代替不太通用的(\=)/2
。 father_child/2
是关系的一个好名字,清楚说明每个参数是什么。
Prolog和Lisp都被认为是人工智能编程的语言,就像布加迪和福特都被认为是汽车制造商一样。
答案 1 :(得分:3)
通常在Lisp中使用嵌入式关系/逻辑语言这样的例子。
该示例使用了KnowledgeWorks,它是LispWorks的扩展,它在Lisp中提供了Prolog的一个版本:
(require "prolog")
(in-package "CP-USER")
(clog:defrel father-child
((father-child tom sally))
((father-child john alfred))
((father-child george peter))
((father-child tom dick))
((father-child john harry))
((father-child george eliz)))
(clog:defrel siblings
((siblings ?x ?y)
(and (father-child ?z ?x)
(father-child ?z ?y)
(/== ?x ?y))))
让我们试一试:
CP-USER 35 > (clog:logic '(siblings harry ?x))
(SIBLINGS HARRY ALFRED)
T