在Prolog中实例化参数

在Prolog中实例化参数,prolog,logic,Prolog,Logic,考虑PROLOG谓词flist,integer和流模型i,o f([],0). f([H|T],S):- f(T,S1), S1 is S-H. 给出评估结果f[1,2,3,4,5,6,7,8],证明答案正确 我已经看到,我们得到的错误参数没有足够的实例化,这是因为只有当列表为空时,S的值才会在内部更新。这是一个很好的理由吗 我已经看到,我们得到的错误参数是不够的 实例化,这是因为在 仅当列表为空时结束。这是一个很好的理由吗 如果该代码应该失败,则为“是” 正确的措辞是: 调用

考虑PROLOG谓词flist,integer和流模型i,o

f([],0).
f([H|T],S):-
    f(T,S1),
    S1 is S-H.
给出评估结果f[1,2,3,4,5,6,7,8],证明答案正确

我已经看到,我们得到的错误参数没有足够的实例化,这是因为只有当列表为空时,S的值才会在内部更新。这是一个很好的理由吗

我已经看到,我们得到的错误参数是不够的 实例化,这是因为在 仅当列表为空时结束。这是一个很好的理由吗

如果该代码应该失败,则为“是”

正确的措辞是:

调用该谓词时,第二个位置的未绑定变量位于顶部或递归vai fT,S1,其中S1是新的,因此未绑定

然后是算法评估

S1是S-H

is/2右侧将有一个未绑定变量,无法继续,即将抛出

但请注意,如果您切换到有限域上的约束满足,它会起作用:

?使用_modulelibraryclpfd。 符合事实的 然后将is/2替换为=:

f[],0。 f[H | T],S:- 金融时报,S1, S1=S-H。 产生一个工作程序:

?-f[1,2,3,4,5,6,7,8],S。 S=36。
你的第二个从句可能有两个拼写错误,应该是f[H | T],S:-fT,S1,S是S1-H。或者f[H | T],S1:-fT,S,S1是S-H。术语流模型从何而来?一般说来,在这种情况下,谓词支持一种模式,模式+,?:第一个参数是in,第二个参数是out,或者可以设置它,在这种情况下,谓词进行验证