如何为Prolog谓词调用的输出结果添加额外括号
问题背景
我定义了如下Prolog谓词:
test(X, Test) :- Test =.. [integer,X].
调用该谓词的当前输出为:
?- test(1,Test). Test = integer(1).
我需要给输出的表达式额外加一层括号,预期效果如下:
?- test(1,Test). Test = (integer(1)).
实现方案
有两种常用实现方式:
- 方案一:修改谓词的项构造逻辑,直接返回带括号结构的绑定值
Prolog中(Term)属于合法的项结构,你只需在构造时多封装一层即可,修改后的谓词代码如下:
test(X, Test) :- InnerTerm =.. [integer, X], Test = (InnerTerm).
修改后调用原查询语句,就能直接得到符合预期的变量绑定结果。
- 方案二:仅需要打印输出符合格式的话,使用你提到的
write/1方案即可,无需修改变量绑定逻辑:
test(X) :- InnerTerm =.. [integer, X], format('Test = (~w).~n', [InnerTerm]). % 也可以直接拼接write实现: % write('Test = ('), write(InnerTerm), write(').'), nl.
调用?- test(1).即可直接输出你想要的格式。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

