gpt4 book ai didi

prolog - 在 prolog 中定义中缀二元运算符时遇到问题

转载 作者:行者123 更新时间:2023-12-04 17:00:58 25 4
gpt4 key购买 nike

我只是序言的新手。我想定义一个中缀二元运算符“rA”,当我给出矩形的宽度和宽度时,它会给出矩形的面积。这是我的代码:

:-op(300, xfy, rA).

rA(X,Y,R) :- R is X*Y.

当我这样做时,代码工作正常:
1 ?- rA(3,4,A).
A = 12.

我无法弄清楚的是将其定义为中缀二元运算符。我收到此错误:
2 ?- A is 3 rA 4.
ERROR: evaluable `3 rA 4' does not exist

谢谢

最佳答案

您不能在标准 Prolog 中执行此操作。但是,SWI-Prolog 曾经支持用户定义算术函数,但我相信该功能在最近的版本中已被弃用。检查文档。一种可能的替代方法是利用几个 Prolog 系统(包括 SWI-Prolog)定义和目标扩展的术语扩展机制 is/2目标来处理使用用户定义算术函数的调用。就像是:

goal_expansion(X is Expression, X is ExpandedExpression) :-
% traverse and transform Expression

但请记住 goal_expansion/2被重复调用,直到达到一个固定点。因此,请注意因尝试扩展已扩展的算术表达式而导致的无限循环。解决此问题的一种方法是使用在调用 goal_expansion/2 时检查的动态谓词缓存扩展的结果。 .可以取消缓存动态谓词,例如当您处理的文件结束时:
term_expansion(end_of_file, _) :-
abolish(...), % the argument will be the predicate indicator of the caching predicate
fail.

扩展时 end_of_file建议在执行任何必要的操作后失败,因为可能有其他(正交)扩展也依赖于 end_of_file 的扩展。 .

关于prolog - 在 prolog 中定义中缀二元运算符时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com