【发布时间】:2011-06-11 06:30:57
【问题描述】:
我想以某种方式定义一个运算符“++>”,以便键入“a ++> b”将生成一个 [a,b] 列表。
我已经编写了以下代码,但它似乎无法完成这项工作。
++>(X,Y) :-
[X,Y].
:- op(500,xfy,++>).
【问题讨论】:
-
这里确实有两个问题,将运算符“++>”定义为中缀符号,并将表达式“a ++> b”设置为“评估”为术语 [a,乙]。正如您从提到 op/3 中所知道的,第一部分是相当标准的 Prolog。让机器到位以“评估”涉及新运营商的条款更加棘手。对于算术函数,SWI-Prolog 有一个指令允许 is/2 使用用户定义的函数,但你的不是算术函数。我可以向您展示如何定义一个新的谓词 iz/2 来“评估” ++> 个术语。
-
我有机会去挖掘 SWI-Prolog 的
arithmetic_function/1指令,我注意到它是 deprecated, perhaps dropped。