Prolog Analogy IQ Test Unexpected token 异常
Prolog Analogy IQ Test Unexpected token exception
我正在尝试开发一个能够解决类比智商测试的程序。正如您在下面看到的,我已经将数字和关系写成事实,并且我还做了一个类比谓词,当给定其他三个数字时,应该 return 一个数字。前两个图通过关系连接,第3和第4个也通过相同的关系连接。
例如,类比应该是这样的:类比(1,5,3,X)。 X=7.
figure 1 -> middle(triangle, square)
figure 5 -> middle(square, triangle)
relation between 1 & 5 -> inverse
figure 3 -> middle(square, circle)
figure 7 -> middle(circle, square)
relation between 3 & 7 -> inverse
当我编译代码时出现以下异常:文件测试实验室 1.ecl,第 105 行:语法错误:意外标记
|图(S1,_(Sh1,Sh2)),
| ^ 这里
我做错了什么?
figure(1, middle(triangle, square)).
figure(2, middle(circle, triangle)).
figure(3, middle(square, circle)).
figure(4, middle(square, square)).
figure(5, middle(square, triangle)).
figure(6, middle(triangle, circle)).
figure(7, middle(circle, square)).
figure(8, middle(triangle, triangle)).
figure(9, samepattern(lowerleft, circle)).
figure(10, samepattern(upperleft, circle)).
figure(11, samepattern(lowerright, circle)).
figure(12, samepattern(upperright, circle)).
figure(13, samepattern(upperleft, square)).
figure(14, samepattern(lowerleft, square)).
figure(15, samepattern(upperright, square)).
figure(16, samepattern(lowerright, square)).
relation(middle(S1,S2), middle(S2,S1), inverse).
relation(samepattern(S1,S2), samepattern(S1,S3), spinverse).
analogy(S1,S2,S3,S4):-
figure(S1, _(Sh1,Sh2)),
figure(S2, _(Sh3,Sh4)),
relation(_(Sh1,Sh2),_(Sh3,Sh4),R),
figure(S3, _(Sh5,Sh6)),
figure(S4, _(Sh7,Sh8)),
relation(_(Sh5,Sh6),_(Sh7,Sh8),R).
术语的名称 必须是原子。因此,不接受诸如 _(X,Y)
之类的术语(因为 _
是一个变量)并导致语法错误。因此,您需要修改谓词analogy/4
的定义如下:
analogy(S1,S2,S3,S4):-
figure(S1, F1),
figure(S2, F2),
relation(F1, F2, R),
figure(S3, F3),
figure(S4, F4),
relation(F3, F4, R).
观察到,在谓词analogy/4
中,用术语F1
、F2
、F3
和F4
表示的数字中的具体参数不是单独访问,因此没有必要明确命名每一个。
运行 示例:
?- analogy(1,5,3,X).
X = 7 ;
false.
我正在尝试开发一个能够解决类比智商测试的程序。正如您在下面看到的,我已经将数字和关系写成事实,并且我还做了一个类比谓词,当给定其他三个数字时,应该 return 一个数字。前两个图通过关系连接,第3和第4个也通过相同的关系连接。
例如,类比应该是这样的:类比(1,5,3,X)。 X=7.
figure 1 -> middle(triangle, square)
figure 5 -> middle(square, triangle)
relation between 1 & 5 -> inverse
figure 3 -> middle(square, circle)
figure 7 -> middle(circle, square)
relation between 3 & 7 -> inverse
当我编译代码时出现以下异常:文件测试实验室 1.ecl,第 105 行:语法错误:意外标记 |图(S1,_(Sh1,Sh2)), | ^ 这里
我做错了什么?
figure(1, middle(triangle, square)).
figure(2, middle(circle, triangle)).
figure(3, middle(square, circle)).
figure(4, middle(square, square)).
figure(5, middle(square, triangle)).
figure(6, middle(triangle, circle)).
figure(7, middle(circle, square)).
figure(8, middle(triangle, triangle)).
figure(9, samepattern(lowerleft, circle)).
figure(10, samepattern(upperleft, circle)).
figure(11, samepattern(lowerright, circle)).
figure(12, samepattern(upperright, circle)).
figure(13, samepattern(upperleft, square)).
figure(14, samepattern(lowerleft, square)).
figure(15, samepattern(upperright, square)).
figure(16, samepattern(lowerright, square)).
relation(middle(S1,S2), middle(S2,S1), inverse).
relation(samepattern(S1,S2), samepattern(S1,S3), spinverse).
analogy(S1,S2,S3,S4):-
figure(S1, _(Sh1,Sh2)),
figure(S2, _(Sh3,Sh4)),
relation(_(Sh1,Sh2),_(Sh3,Sh4),R),
figure(S3, _(Sh5,Sh6)),
figure(S4, _(Sh7,Sh8)),
relation(_(Sh5,Sh6),_(Sh7,Sh8),R).
术语的名称 必须是原子。因此,不接受诸如 _(X,Y)
之类的术语(因为 _
是一个变量)并导致语法错误。因此,您需要修改谓词analogy/4
的定义如下:
analogy(S1,S2,S3,S4):-
figure(S1, F1),
figure(S2, F2),
relation(F1, F2, R),
figure(S3, F3),
figure(S4, F4),
relation(F3, F4, R).
观察到,在谓词analogy/4
中,用术语F1
、F2
、F3
和F4
表示的数字中的具体参数不是单独访问,因此没有必要明确命名每一个。
运行 示例:
?- analogy(1,5,3,X).
X = 7 ;
false.