我正在写一个小程序,它计算列表中有多少元素不是数字.这是我的代码:
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的新手.
余由Prolog的谓词posAt(List1,P,List2),在测试位置是否在元件P的List1和List2是相等的:
posAt([X|Z], 1, [Y|W]) :-
   X = Y.
posAt([Z|X], K, [W|Y]) :-
   K > 1,
   Kr is K - 1,
   posAt(X, Kr, Y).
测试时:
?- posAt([1,2,3], X, [a,2,b]).
我期望输出,X = 2但我得到以下错误:
ERROR: >/2: Arguments are not sufficiently instantiated
为什么我收到此错误?
我正在尝试匹配我正在创建的事实的一部分,我的测试用例工作得很好!
x([1,2,3,4],'bleah'). x([1,2,4],'bleah2'). x([1,2],'bleah8'). x([1,3,4],'bleah3'). x([5,6,7,8],'bleah5'). x([6,7,8,9],'bleah6'). fuzzy(X,R) :- x(Z, R), subset(X,Z) . remaining(X,Y,D,M) :- x(Z,D) , select(X,Z,N), select(Y,N,M). pair(X,Y,R) :- x([X,Y],R) ; x([Y,X],R). Output: ?- x([1,2|REST],D). REST = [3, 4], D = bleah ; REST = [4], D = bleah2 ; REST = [], D = bleah8 ; false. ?- pair(2,1,D). D = bleah8 ; false. ?- fuzzy([2,1],R). R = bleah ; R = bleah2 ; R = bleah8 ; false. ?- remaining(2,1,D,M). D = bleah, M = [3, …
我正在学习Prolog,作为练习,我正在尝试一个简单的数据库来计算所有数字的总和,直到给定的数字(即0 = 0,1 = 1,2 = 3,3 = 6,4 = 10,...).很容易:
counting_sum(0, 0).
counting_sum(Num, Sum) :- Num > 0, PrevNum is Num - 1,
    counting_sum(PrevNum, PrevSum), Sum is Num + PrevSum.
counting_sum(150000, X).随着堆栈溢出,它在某处爆炸.我知道Prolog可以做尾递归,但如果我将递归调用移到规则的末尾,我得到
error(instantiation_error,(is)/2)
我假设它告诉我PrevSum在统一之前我不能使用它counting_sum(PrevNum, PrevSum).这是正确的,有没有办法让这个尾递归?我正在使用GNU Prolog 1.3.1,如果这有任何区别.
PS我的术语仍然不稳定.如果我错误地使用了这些条款,请告诉我.
stack-overflow recursion tail-recursion prolog instantiation-error
我正在编写一个简单的代码,生成一个包含5个数字的简单列表,其第一个变量应为正数,我试图理解为什么这个代码失败了
test([H|T]) :- H > 0, length(T,4).
我打电话的时候
 length(X,5), test(X).
它向我显示以下错误:
错误:参数没有充分实例化
当我调试代码时,H变量in test不会被实例化.
谁知道为什么?
这是我的代码: -
fib(0,0).
fib(1,1).
fib(F,N) :-
    N>1,
    N1 is N-1,
    N2 is N-2,
    F is F1+F2,
    fib(F1,N1),
    fib(F2,N2),
    write(F," ,").
在GNU Prolog的咨询中,我得到:
| ?- consult('C:/GNU-Prolog/bin/fib.pl').
compiling C:/GNU-Prolog/bin/fib.pl for byte code...
C:/GNU-Prolog/bin/fib.pl compiled, 3 lines read - 1253 bytes written, 15 ms
yes
| ?- fib(F,2).
uncaught exception: error(instantiation_error,(is)/2)
我通过终端在Mac上运行SWI-Prolog.我正在尝试通过在终端中打开swipl之后编写通常来访问Atom文件:
?- [hwk1-my_name].
而不是swipl有知识库可以玩,它给了我这个:
ERROR: Arguments are not sufficiently instantiated
我是Prolog的新手,我现在的程序只是我教授提供的复制粘贴代码,以便开始分配.这是否意味着错误可能是由于下面的代码中的某些内容,如果是这样,是什么促使这个?这是提供给我的代码:
father(Dad, Child) :-
   parent(Dad, Child),
   male(Dad).
mother(Mom, Child) :-
   parent(Mom, Child),
   female(Mom).
had_a_child(Man, Woman) :-
   father(Man, Child),
   mother(Woman, Child).
sibling(Sibling1, Sibling2) :-
   parent(Parent, Sibling1),
   parent(Parent, Sibling2),
   Sibling1 \= Sibling2.
brother(Brother, Sib) :-
   sibling(Brother, Sib),
   male(Brother).
sister(Sister, Sib) :-
   sibling(Sister, Sib),
   female(Sister).
我看过Prolog Prologue的定义between/3:
between(Lower, Upper, Lower) :-
   Lower =< Upper.
between(Lower1, Upper, X) :-
   Lower1 < Upper,
   Lower2 is Lower1 + 1,
   between(Lower2, Upper, X).
我不明白为什么它需要递归.逻辑定义between可以是:
between(Lower, Upper, Something):-
   Lower =< Upper,
   Lower =< Something,
   Something =< Upper.
我试过它gprolog并且它可以工作,但仅用于简单的查询:
| ?- between(0,5,1).
yes
对于带变量的查询,我得到:
| ?- between(0,5,X).
uncaught exception: error(instantiation_error, (=<)/2)
我真的不明白为什么.
我有点像Prolog需要某种参考数字来统一变量,但为什么会出现神秘错误(=<)/2?
我是Prolog的初学者,有两个要求:
f(1) = 1
f(x) = 5x + x^2 + f(x - 1)
规则:
f(1,1).
f(X,Y) :- 
Y is 5 * X + X * X + f(X-1,Y).
查询:
f(4,X).
输出:
ERROR: is/2: Arguments are not sufficiently instantiated
如何添加f(X-1)的值?
我在ECLiPSe下遇到了我的CSP问题.我想在我的密码中添加一个约束,要求TWO表示的数字可以被2整除.
[eclipse 11]: test(Xs).
instantiation fault in (_268{[1..4]}*100 + _200{[0..9]}*10 + _302{[0..9]}*1) mod 2#=0
Abort
谢谢你的帮助.
我的代码:
/*
          T W O                                           
   +  T H R E E      
   +  T H R E E                                       
      ---------                                      
      E I G H T                                     
*/
:- lib(fd).
myCsp(Xs):-
    Xs=[W,I,G,H,T,R,O,E],
    Xs::0..9,
    [C1,C2,C3,C4]::0..2,
    T #> 0,E #> 0,
    O + E + E #= C1*10 + T,
    W + E + E + C1 #= C2*10 + H,
    T + R + R + C2 #= C3*10 …prolog constraint-programming eclipse-clp cryptarithmetic-puzzle instantiation-error