Prolog 中的这个谓词有什么问题?
findThree([H|T],_,3).
findThree([H|T], M, Z):-
( member(H,M)
-> Z2 is Z + 1,
select(H,M,C),
findThree(T,C,Z2)
;select(H,M,C),
findThree(T,C,Z)
).
所以,我想做的是查看某个元素是否在指定列表中。如果是,我会增加一些变量,并在找到其中 3 个元素时停止。然而,这似乎对我不起作用——这是我的语法问题吗?我正在尝试在 SWI-Prolog 中使用 If-else 结构;这可能是问题所在吗?
findThree([H|T],_,3).
findThree([H|T], M, Z):-
( member(H,M)
-> Z2 is Z + 1,
select(H,M,C),
findThree(T,C,Z2)
;select(H,M,C),
findThree(T,C,Z)
).
So, what I'm trying to do is see if an element is in a specified list. If it is, I increment some variable, and stop if I found 3 of those elements. However, this does not seem to be working for me- is it a problem with my syntax? I'm trying to use an If-else construct in SWI-Prolog; could that be the issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Z is Z + 1
对于整数总是失败;它将计算Z + 1
的值,然后尝试将其与Z
统一。由于Z
通常不会与Z + 1
具有相同的值,因此is
将失败。您需要创建一个新变量Z2
,使用Z2 is Z + 1
,然后使用Z2
而不是Z
代码> 在相关地方。获取您的代码并进行修复:
Z is Z + 1
will always fail for integers; that will compute the value ofZ + 1
and then try to unify it withZ
. SinceZ
will generally not have the same value asZ + 1
, theis
will fail. You will need to create a new variableZ2
, useZ2 is Z + 1
, and then useZ2
instead ofZ
in relevant places.Taking your code and making fixes: