Prolog初学者:我无法开始工作的一个小例子。

Prolog初学者:我无法开始工作的一个小例子。,prolog,Prolog,我有一些序言。lessThanTen和example谓词按预期工作,但是exam谓词不工作 lessThanTen(9). lessThanTen(8). lessThanTen(7). lessThanTen(6). lessThanTen(5). lessThanTen(4). lessThanTen(3). lessThanTen(2). lessThanTen(1). lessThanTen(0). % This should always return 5. example(X) :

我有一些序言。lessThanTen和example谓词按预期工作,但是exam谓词不工作

lessThanTen(9).
lessThanTen(8).
lessThanTen(7).
lessThanTen(6).
lessThanTen(5).
lessThanTen(4).
lessThanTen(3).
lessThanTen(2).
lessThanTen(1).
lessThanTen(0).

% This should always return 5.
example(X) :-
        X is 5.

% This should return all values that are less than ten.
exam(X) :-
        X is lessThanTen(Y).
以下是输出:

% swipl
...

?- [addv1]. 
Warning: /.../addv1.pl:17:
        Singleton variables: [Y]
% addv1 compiled 0.00 sec, 1,484 bytes
true.

?- lessThanTen(X).
X = 9 ;
X = 8 ;
X = 7 ;
...

?- example(X).
X = 5.

?- exam(X).
ERROR: is/2: Arithmetic: `lessThanTen/1' is not a function
?- exam(5).
ERROR: is/2: Arithmetic: `lessThanTen/1' is not a function

我认为我得到的警告是非常关键的。

is
操作符期望它的右参数-your
lessThanTen(Y)
-是一个算术表达式。当然不是


而且,考试/1看起来也不对:什么是
Y
?该子句只接受一个参数
X

对不起,我不太明白。为什么
lessThanTen(Y)
不是一个算术表达式?当我评估
lessThanTen(Y)
时,它是
9;8.7.6.5.4.3.2.1.0.
Y是我创建的变量吗?我基本上只是想得到所有小于10的值。我本来打算写你在这里所做的,但我不确定考试/1要做什么。很高兴看到你解决了你的问题!
lessThanTen(9).
lessThanTen(8).
lessThanTen(7).
lessThanTen(6).
lessThanTen(5).
lessThanTen(4).
lessThanTen(3).
lessThanTen(2).
lessThanTen(1).
lessThanTen(0).


example(X) :-
        X is 5.


exam(X) :-
        lessThanTen(X).