我试图将储物柜与代码联系起来。这就是我到目前为止所做的。
lockerof(C, [], V).
lockerof(C,[C|_], V).
lockerof(C, [[C, V]|_], V).
当我输入时:
lockerof(a, [[a,1],[b,2]], V).
它给了我一个我得到的价值:
V = 1
但是当我输入时:
lockerof(b, [[a,1],[b,2]], V).
我得到'不'但我希望输出为:
V =2
我做错了什么,我该如何解决这个问题?
答案 0 :(得分:0)
您还需要扫描列表的尾部。使用递归:
lockerof(C, [_|T], V) :- lockerof(C, T, V).
那就是“如果[C,V]在列表的尾部,那么它也在列表本身中”。
另外,我不认为你的前两条规则是必要的。
最后,您可以使用member / 2谓词在一行中实现它:
lockerof(C, L, V) :- member([C,V], L).