这是我的代码。
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? 谢谢你的帮助
答案 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
等于X
,Y
统一,也会执行第二次或案例(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