Dynamic Prolog-使用动态断言
我是Prolog新手,我很难使用动态谓词 首先,这是我正在执行的代码Dynamic Prolog-使用动态断言,dynamic,prolog,prolog-assert,Dynamic,Prolog,Prolog Assert,我是Prolog新手,我很难使用动态谓词 首先,这是我正在执行的代码 :- dynamic(list/1). add(X, LL) :- asserta(list([])), asserta(list(X)), retract(list(LL)). 我知道代码看起来很奇怪,但我只是在寻找正确的语法 现在,如果我这样做: 加(2,LL) 答案是: LL=2 LL=[] 但我想做的是将X(2)添加到数组([])。所以 LL=[2] 它看起来很简单(可能很简单),但我无法让它工作 非常感谢 如果要
:- dynamic(list/1).
add(X, LL) :- asserta(list([])), asserta(list(X)), retract(list(LL)).
我知道代码看起来很奇怪,但我只是在寻找正确的语法
现在,如果我这样做:
加(2,LL)
答案是:
LL=2
LL=[]
但我想做的是将X(2)添加到数组([])。所以
LL=[2]
它看起来很简单(可能很简单),但我无法让它工作
非常感谢 如果要将
X
添加到列表的前面:
add(X, LL) :-
( retract(list(Prev))
-> LL = [X|Prev]
; LL = [X]
),
asserta(list(LL)).
但我同意@jsf的建议。Assert/retract只能在某些情况下使用,因为在某些应用程序中可能非常有效。我想将其添加到前面。我希望它在X=[]的情况下失败。如果您是Prolog新手,请忘记assert。首先学习所有其他内容:逻辑变量、统一、谓词和/或、列表、递归……当然,如果可能,最好避免使用非逻辑特性,但Prolog的DBs针对它们的任务进行了很好的调优,我不会说它们“低效”。在我的2便士机器上,我在大约8秒内得到一个完全索引的Wordnet图像。。。(大约30万张唱片…)的确,我试图用“在某些情况下”来限定我的评论,但没有说得很好。