我正在尝试构建一个简单的谓词,它将两个列表作为输入,结果是由前两个列表的交集组成的第三个.我决定使用逻辑陈述.我很确定我的逻辑是正确的,但我的谓词不起作用.有任何想法吗?:
element(X,[H|T]) :-
X=H
;
element(X,T).
intersection(L1,L2,R) :-
not((
element(A,L1),
not(element(A,L2))
)),
not((
element(A,L1),
not(element(A,R))
)).
Run Code Online (Sandbox Code Playgroud)
请不要发布替代方法我想知道为什么每次都返回FALSE.
我已经把我的思绪包裹了很多,无法理解.是否可以使用回溯生成以这种格式生成列表的脚本:
[a]
[a,b]
[a,b,a]
[a,b,a,b]
...
Run Code Online (Sandbox Code Playgroud)
我已经制作了一个一次生成两个元素但我的头开始受伤试图制作一个产生"a",下一次"b"和下一个"a"等等.
这是一次两个元素的脚本:
ab([a]).
ab([b,a|T]):-ab([a|T]).
ab([a,b|T]):-ab([b|T]).
Run Code Online (Sandbox Code Playgroud)