急切地评估Prolog中的所有谓词调用

急切地评估Prolog中的所有谓词调用,prolog,Prolog,在阅读时,我最初假设call(f,…)等价于f(…),其中f是一些谓词。但我观察到,在某些情况下,两者的行为实际上是不同的。例如,假设一个知识库包含子句f(g(x))。然后查询call(f,g(x))成功,而f(call(g,x))没有成功。这是有问题的,因为我有时需要使用其主体包含嵌套谓词调用的子句。我希望Prolog急切地评估所有谓词调用(我想知道这是否是正确的词?),这样在统一开始之前,查询f(调用(g,x))减少到f(g(x)),并成功。这可能吗?请注意,Prolog有关系,而不是函数。

在阅读时,我最初假设
call(f,…)
等价于
f(…)
,其中
f
是一些谓词。但我观察到,在某些情况下,两者的行为实际上是不同的。例如,假设一个知识库包含子句
f(g(x))
。然后查询
call(f,g(x))
成功,而
f(call(g,x))
没有成功。这是有问题的,因为我有时需要使用其主体包含嵌套谓词调用的子句。我希望Prolog急切地评估所有谓词调用(我想知道这是否是正确的词?),这样在统一开始之前,查询
f(调用(g,x))
减少到
f(g(x))
,并成功。这可能吗?

请注意,Prolog有关系,而不是函数。在
f(call(g,x))
中,谓词
f/1
的目标是使用一个参数,即术语
call(g,x)
。因此,没有办法让参数“评估”。在某些情况下,您可能会这样做,但我更愿意建议您首先习惯Prolog。我明白了。我想我是想解决一个典型的XY问题。我发布了我尝试这样做的最初动机。