【发布时间】:2018-04-14 10:58:27
【问题描述】:
我想做的是:
来自历史/2
来自历史(HL,FL)
如果列表包含单词“ate”,则FL是列表的第三个元素
如果列表包含所有单词 ["you","can","have"],则 FL 是列表的第 4 个元素
谓词应该在列表 HL 的列表上循环,如果其中一个列表包含上述单词,它应该根据找到的单词将第 3/4 个元素附加到 FL,否则它不应该得到任何东西.
?- fromHistory([[i,ate,x], [you,can,have,y]], FL).
FL = [x, y] ;
false.
?- fromHistory([[this,is,a,useless,input], [i,ate,x], [another,input],
[another,useless,input], ["Ok"], [you,can,have,y]], FL).
FL = [x, y] ;
false.
x 和 y 并不总是在列表的末尾,而是在 ["ate"] 和 ["you","can","have"] 之后的字符串
我尝试使用here中的查找版本
find(X,Y,[X,Y|Tail]):-
!.
find(X,Y,[_|Tail]):-
find(X,Y,Tail).
foodFromHistory(HL1, FL):-
flatten(HL1, HL),
find(ate, FL1, HL),
find([you, can, have], FL2, HL),
FL = [FL1|FL2].
但是它不适用于 [you,can,have] 并返回 false,它也不适用于整个列表,而仅适用于第一次出现。
【问题讨论】:
-
你的尝试在哪里?
-
更新帖子...
标签: prolog