我在PROLOG中构建一些相对简单的函数,它们接受一个输入和一个输出。为简单起见,比如
func(List, Item, [Item | List]).
现在,我已经有了代码,可以连续调用其中的几个函数并传递结果。问题是我必须继续为所有输出创建新的变量名。
someOtherFunc(List, Item) :-
func(List, Item, Output1),
doSomething(Output1).
这里的问题是我实际上有几个func
和几个doSomething
,并且非常感谢您不必明确绑定Output1
变量。有没有办法实现这个目标?
答案 0 :(得分:2)
我不确定你在问什么,但首先请注意那些不函数,但是谓词。这是一种完全不同的编程范式。变量不是你放入和取出一些数据的“盒子”:它们更接近变量的数学含义,因为一旦你将它们绑定到它们的值的某些约束,它就永远存在。
回到你的问题,答案是否定的,你不能避免像这样绑定一些Output1。有时候你可以用下划线来告诉prolog你只是不关心这个值,但是这样做你就失去了利用那个特定值的能力。在你的例子中,你想做这样的事情(在命令式伪代码中):
var list = ..., item = ...;
doSomething(func(list, item));
据我所知,在prolog中没有其他方法,你只需像你一样使用中间变量。我可以建议的唯一改进是选择非常仔细的谓词和变量名称。
答案 1 :(得分:0)
if