【发布时间】:2023-03-20 21:45:01
【问题描述】:
我正在编写一个小程序来计算列表中有多少元素不是数字。 这是我的代码:
not_number([],0).
not_number([X|T],R):-
not(number(X)),
R1 is R+1,
not_number(T,R1).
not_number([_|Tail],Result):-
not_number(Tail,Result).
如果我执行这样的代码:
?- not_number([1,2,3,5], R).
我得到 R = 0(应该是这样)
R = 0.
但是如果我把一个字符放在列表中:
?- not_number([1,2,3,5,a], R).
然后我收到此错误:
ERROR: not_number/2: Arguments are not sufficiently instantiated
Exception: (10) not_number([a], _G247) ?
有人能解释一下代码有什么问题吗?我是 prolog 的新手。
【问题讨论】:
-
因为在
not_number([a], R)的情况下没有实例化R时,您正在执行R1 is R+1。您的递归案例有点倒退。你想做not_number(T, R1), R is R1+1。 -
This page
is也有很好的讨论
标签: prolog arguments instantiation-error