我只是从 Prolog 开始,我无法弄清楚为什么以下内容不能按我的预期工作。如果列表 L2 包含在 L1 中,我正在尝试创建一个返回 true 的谓词。这是我写的:
assert(contains (L1, L1)).
assert(contains(L1, [X|L2]):-member(X, L1), contains(L1, L2)).
assert(contains(L1, [])).
我认为这将等同于“如果'L3 = X | L2'的X在L1中,并且L2也在L1中则为真”,包含(L1,L2)被递归翻译,直到所有成员都被遍历我们只剩下最后一个选项,或者我们找到一个不在 L1 中的成员,它将使谓词失败。
不幸的是,它似乎不是那样工作的。好像只返回 member(X, L1) 的值,所以 contains([1,2,3],[1,4,5]) 就通过了,但是 contains([1,2,3],[4, 1,5])没有。
我究竟做错了什么?