PROLOG中的功能输入和输出

时间:2011-08-22 21:19:12

标签: prolog

我在PROLOG中构建一些相对简单的函数,它们接受一个输入和一个输出。为简单起见,比如

func(List, Item, [Item | List]).

现在,我已经有了代码,可以连续调用其中的几个函数并传递结果。问题是我必须继续为所有输出创建新的变量名。

someOtherFunc(List, Item) :-
   func(List, Item, Output1),
   doSomething(Output1).

这里的问题是我实际上有几个func和几个doSomething,并且非常感谢您不必明确绑定Output1变量。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

我不确定你在问什么,但首先请注意那些函数,但是谓词。这是一种完全不同的编程范式。变量不是你放入和取出一些数据的“盒子”:它们更接近变量的数学含义,因为一旦你将它们绑定到它们的值的某些约束,它就永远存在。

回到你的问题,答案是否定的,你不能避免像这样绑定一些Output1。有时候你可以用下划线来告诉prolog你只是不关心这个值,但是这样做你就失去了利用那个特定值的能力。在你的例子中,你想做这样的事情(在命令式伪代码中):

var list = ..., item = ...;
doSomething(func(list, item));

据我所知,在prolog中没有其他方法,你只需像你一样使用中间变量。我可以建议的唯一改进是选择非常仔细的谓词和变量名称。

答案 1 :(得分:0)

if