标签: instantiation-error

Prolog - 参数没有充分实例化

我正在写一个小程序,它计算列表中有多少元素不是数字.这是我的代码:

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).  
Run Code Online (Sandbox Code Playgroud)

如果我执行这样的代码:

?- not_number([1,2,3,5], R).
Run Code Online (Sandbox Code Playgroud)

我得到R = 0(应该是)

R = 0.
Run Code Online (Sandbox Code Playgroud)

但是,如果我在列表中放置一个字符:

?- not_number([1,2,3,5,a], R).
Run Code Online (Sandbox Code Playgroud)

然后我收到这个错误:

ERROR: not_number/2: Arguments are not sufficiently instantiated
   Exception: (10) not_number([a], _G247) ? 
Run Code Online (Sandbox Code Playgroud)

有人能解释代码有什么问题吗?我是prolog的新手.

arguments prolog clpfd instantiation-error

18
推荐指数
2
解决办法
4万
查看次数

简单的prolog程序.获取错误:>/2:参数未充分实例化

余由Prolog的谓词posAt(List1,P,List2),在测试位置是否在元件PList1List2是相等的:

posAt([X|Z], 1, [Y|W]) :-
   X = Y.
posAt([Z|X], K, [W|Y]) :-
   K > 1,
   Kr is K - 1,
   posAt(X, Kr, Y).
Run Code Online (Sandbox Code Playgroud)

测试时:

?- posAt([1,2,3], X, [a,2,b]).
Run Code Online (Sandbox Code Playgroud)

我期望输出,X = 2但我得到以下错误:

ERROR: >/2: Arguments are not sufficiently instantiated

为什么我收到此错误?

list prolog clpfd instantiation-error

10
推荐指数
2
解决办法
2万
查看次数

Prolog参数没有充分实例化

我正在尝试匹配我正在创建的事实的一部分,我的测试用例工作得很好!

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 instantiation-error

5
推荐指数
1
解决办法
1万
查看次数

这可以在Prolog中进行尾递归吗?

我正在学习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.
Run Code Online (Sandbox Code Playgroud)

counting_sum(150000, X).随着堆栈溢出,它在某处爆炸.我知道Prolog可以做尾递归,但如果我将递归调用移到规则的末尾,我得到

error(instantiation_error,(is)/2)
Run Code Online (Sandbox Code Playgroud)

我假设它告诉我PrevSum在统一之前我不能使用它counting_sum(PrevNum, PrevSum).这是正确的,有没有办法让这个尾递归?我正在使用GNU Prolog 1.3.1,如果这有任何区别.

PS我的术语仍然不稳定.如果我错误地使用了这些条款,请告诉我.

stack-overflow recursion tail-recursion prolog instantiation-error

5
推荐指数
1
解决办法
1590
查看次数

Prolog:变量列表的主管没有立即生效

我正在编写一个简单的代码,生成一个包含5个数字的简单列表,其第一个变量应为正数,我试图理解为什么这个代码失败了

test([H|T]) :- H > 0, length(T,4).
Run Code Online (Sandbox Code Playgroud)

我打电话的时候

 length(X,5), test(X).
Run Code Online (Sandbox Code Playgroud)

它向我显示以下错误:

错误:参数没有充分实例化

当我调试代码时,H变量in test不会被实例化.

谁知道为什么?

list prolog instantiation-error

4
推荐指数
1
解决办法
127
查看次数

在GNU Prolog中生成fibonacci系列的程序给出了实例化错误

这是我的代码: -

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," ,").
Run Code Online (Sandbox Code Playgroud)

在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)
Run Code Online (Sandbox Code Playgroud)

prolog fibonacci instantiation-error

4
推荐指数
1
解决办法
2万
查看次数

在查阅文件时,参数没有充分实例化

我通过终端在Mac上运行SWI-Prolog.我正在尝试通过在终端中打开swipl之后编写通常来访问Atom文件:

?- [hwk1-my_name].
Run Code Online (Sandbox Code Playgroud)

而不是swipl有知识库可以玩,它给了我这个:

ERROR: Arguments are not sufficiently instantiated
Run Code Online (Sandbox Code Playgroud)

我是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).
Run Code Online (Sandbox Code Playgroud)

prolog instantiation-error

3
推荐指数
1
解决办法
439
查看次数

/ 3之间可以不递归吗?

我看过Prolog Prologue的定义between/3:

between(Lower, Upper, Lower) :-
   Lower =< Upper.
between(Lower1, Upper, X) :-
   Lower1 < Upper,
   Lower2 is Lower1 + 1,
   between(Lower2, Upper, X).
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它需要递归.逻辑定义between可以是:

between(Lower, Upper, Something):-
   Lower =< Upper,
   Lower =< Something,
   Something =< Upper.
Run Code Online (Sandbox Code Playgroud)

我试过它gprolog并且它可以工作,但仅用于简单的查询:

| ?- between(0,5,1).

yes
Run Code Online (Sandbox Code Playgroud)

对于带变量的查询,我得到:

| ?- between(0,5,X).
uncaught exception: error(instantiation_error, (=<)/2)
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么.

我有点像Prolog需要某种参考数字来统一变量,但为什么会出现神秘错误(=<)/2

prolog instantiation-error

2
推荐指数
1
解决办法
122
查看次数

Prolog :: f(x)递归

我是Prolog的初学者,有两个要求:

  1. f(1) = 1

  2. 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)的值?

recursion arithmetic-expressions prolog instantiation-error

2
推荐指数
1
解决办法
263
查看次数

实例化故障ECLiPSe CSP

我在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
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

我的代码:

/*
          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 …
Run Code Online (Sandbox Code Playgroud)

prolog constraint-programming eclipse-clp cryptarithmetic-puzzle instantiation-error

1
推荐指数
1
解决办法
485
查看次数