首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog,使用表达式

Prolog,使用表达式
EN

Stack Overflow用户
提问于 2011-05-30 11:59:37
回答 2查看 1K关注 0票数 6

我正在尝试学习SWI prolog,但我的简单程序在我认为它应该成功的时候失败了。

代码语言:javascript
复制
%My code:
orthogonal((X1,Y1,Z1),(X2,Y2,Z2)) :- (X1*X2)+(Y1*Y2)+(Z1*Z2)==0.
integerVector((X,Y,Z)) :- integer(X),integer(Y),integer(Z).

?-orthogonal((1,0,0),(0,0,1)).

我在伪press窗口中按下compile Buffer,输出为:

代码语言:javascript
复制
% [PATH].pl compiled 0.00 sec, 136 bytes
ERROR: emacs_prolog_mode ->error_at_location: Argument 1 (int): `int' expected, found `@11470948?start'
ERROR: emacs_prolog_mode ->error_at_location: Argument 1 (int): `int' expected, found `@11470948?start'
Warning: [PATH]s.pl:5:
        Goal (directive) failed: user:orthogonal((1,0,0), (0,0,1))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-30 12:37:37

您已经使用(==)/2代替了(=:=)/2,后者将其参数计算为算术表达式。

你可以使用(X,Y,Z),但它不是Haskell中的三元组。要查看此信息,请执行以下操作:

代码语言:javascript
复制
?- write_canonical((1,2,3)).
','(1,','(2,3))

?- (1,2,3) = (X,Y).
X = 1,
Y = (2,3).
票数 7
EN

Stack Overflow用户

发布于 2011-05-30 12:50:05

Prolog中的表达式简单地表示语法术语树。要计算表达式,您需要使用X is Y,它将Y计算为算术表达式,并将结果与X统一。或者,您可以使用X =:= Y,它将X和Y都计算为算术表达式,然后统一结果。

干杯!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6172155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档