【发布时间】:2015-05-18 16:24:22
【问题描述】:
我在 Prolog 中创建了一个函数来“打开”一个列表,例如像这样将列表的头部附加到尾部:
?- turn([a,b,c,d,e], Tlist).
Tlist=[b,c,d,e,a]
在我的程序上下文中,我希望能够为规则使用预定义列表,例如
alist([a,b,c,d,e,f])
但我得到了很多不同的错误。我尝试了以下作为参数:
turn(alist(L),R).
listv(X) :- alist(L), member(X, L).
turn(listv(X),R).
并且我知道根据 Prolog,这些列表中的每一个都是列表的不同表示,但我不确定哪种列表表示适合完成对预定义列表的操作。
谢谢!
【问题讨论】:
-
您不能嵌入谓词调用,例如
turn(listv(X), R)。那谓词/事实是什么意思?它有两个未定义的变量。您需要turned_lists(P, Result) :- call(P, L), turn(L, Result).之类的东西并将其称为turned_lists(alist, Result).或类似的东西,这完全取决于您要达到的目标(这并不完全清楚)。 -
糟糕,这些是对我已经进行的现有谓词的查询!很抱歉那里不够清晰。
标签: list variables prolog arguments