Prolog初学者:琐碎的例子,我无法开始工作。

时间:2010-06-05 18:00:24

标签: prolog

我有一些序言。 lessThanTen和示例谓词按预期工作,但是检查谓词不起作用。

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

我想我得到的警告非常关键。

2 个答案:

答案 0 :(得分:1)

is运算符期望其右手参数 - 您的lessThanTen(Y) - 是一个算术表达式。当然,它不是。

另外,考试/ 1看起来不对:什么是Y?该子句采用单个参数X

答案 1 :(得分: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).