Prolog模拟IQ测试意外令牌异常

Prolog模拟IQ测试意外令牌异常,prolog,Prolog,我正试图开发一个程序,能够解决一个类比智商测试。正如你在下面看到的,我把数字和关系写成了事实,我还做了一个类比谓词,当给另外三个数字时,它应该返回一个数字。前两个图形通过关系连接,第三个和第四个图形也通过相同的关系连接 例如,类比应该是这样工作的:类比(1,5,3,X)。X=7 当我编译代码时,我得到以下异常:file test lab 1.ecl,第105行:语法错误:意外标记 |图(S1,1;(Sh1,Sh2)), |^这里 我做错了什么 figure(1, middle(triangle,

我正试图开发一个程序,能够解决一个类比智商测试。正如你在下面看到的,我把数字和关系写成了事实,我还做了一个类比谓词,当给另外三个数字时,它应该返回一个数字。前两个图形通过关系连接,第三个和第四个图形也通过相同的关系连接

例如,类比应该是这样工作的:类比(1,5,3,X)。X=7

当我编译代码时,我得到以下异常:file test lab 1.ecl,第105行:语法错误:意外标记 |图(S1,1;(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).

术语的名称必须是原子。因此,诸如
\uux,Y)
之类的术语不被接受(因为
\uuu
是一个变量),并导致语法错误。因此,您需要修改谓词
类比/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).
注意,在谓词
simulation/4
中,图中由术语
F1
F2
F3
F4
表示的特定参数不是单独访问的,因此,不必显式命名每个参数

运行示例:

?- analogy(1,5,3,X).
X = 7 ;
false.

谢谢你,伙计。对不起,我是个笨蛋。
?- analogy(1,5,3,X).
X = 7 ;
false.