prolog - prolog代码的混乱行为(初学者)

时间:2016-12-03 17:50:40

标签: prolog

这是我的代码。

equals2(X,Y,N,I):- X is Y,I is N+1; I is N.
elemNum(X,[],0).
elemNum(X,[Y|Ys],N) :-  elemNum(X,Ys,N1),equals2(X,Y,N1,I),N is I.

lemNum第一个参数是来自数组的元素,第二个是数组。它计算数组中元素的数量。 然后在控制台

| ?- elemNum(1,[1,2,3,1,1],N),N<2.

N = 1 ? 

yes

我确信我的功能elemNum工作正常。怎么可能在控制台中这个断言返回1? 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

不确定你想要什么...但我想你要计算列表中的元素数(elemNum/3的第二个参数)等于第一个参数。

如果是,您应该按如下方式修改equals2/4

equals2(X,Y,N,I):- X is Y,I is N+1; X \== Y, I is N.

或更好(恕我直言)将其分为两个不同的条款

equals2(X,X,N,I):- I is N+1.

equals2(X,Y,N,N):- X \== Y.

使用equal2/4,即使I is N等于XY统一,也会执行第二次或案例(elemNum(1,[1,2,3,1,1],N))(N} elemNum/3再次为3,2,2,再次为1,2,1,1和0。

关于elemNum(_,[],0). elemNum(X,[Y|Ys],I) :- elemNum(X,Ys,N1), equals2(X,Y,N1,I). ,有效,但您可以将其简化(避免警告)

equals2/4

或者您可以重写它,避免使用elemNum(_, [], 0). elemNum(X, [X | Ys], I) :- elemNum(X, Ys, I0), I is I0+1. elemNum(X, [Y | Ys], I) :- X \== Y, elemNum(X, Ys, I). 作为

CACHE MANIFEST

CACHE:
app.cache
index.html
app/app.js

NETWORK:
*

SETTINGS:
prefer-online

# hash: 23567ecbf082c4c3ccc008701719ab3b089ff8043b7ef5d1c11e5af003eb6250