PROLOG中的函数输入和输出

PROLOG中的函数输入和输出,prolog,Prolog,我正在PROLOG中构建一些相对简单的函数,它们只接受一个输入和一个输出。为了简单起见 func(List, Item, [Item | List]). 现在,我有了一个代码,它将调用一行中的几个函数,并将结果传递给其他函数。问题是我必须不断为所有输出创建新的变量名 someOtherFunc(List, Item) :- func(List, Item, Output1), doSomething(Output1). 这里的问题是,我实际上有几个func和几个doSomethi

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

func(List, Item, [Item | List]).
现在,我有了一个代码,它将调用一行中的几个函数,并将结果传递给其他函数。问题是我必须不断为所有输出创建新的变量名

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

这里的问题是,我实际上有几个
func
和几个
doSomething
,如果不必显式绑定
Output1
变量,我会非常感激。有什么办法可以做到这一点吗?

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

回到你的问题,答案是否定的,你不能避免像那样绑定一些输出。有时,您可以在下面加一个下划线,告诉prolog您只是不关心该值,但这样做会使您失去使用该特定值的能力。在您的示例中,您希望这样做(在命令伪代码中):


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

您可能可以使用DCGs隐藏参数,但我不太确定。在多次阅读你的问题后,我仍然不明白你到底想要什么…它们不是函数,而是谓词。然后,如果三个参数的谓词接受一个输入并产生一个输出,那么其中一个参数是多余的。您的
func
谓词是一个不可操作的谓词,因此您可能希望给出一个更好的示例。请在代码段中添加一些解释,以使您的解决方案更易于理解。
func1(Input1, Input2) :-
   func2(Input1, Input2, Output1),
   useFun(Output1, Output2).
/* Output2 the result I obtain from the function useFun */
func1(Input1, Input2) :-
   func2(Input1, Input2, Output1),
   useFun(Output1, Output2).
/* Output2 the result I obtain from the function useFun */