gpt4 book ai didi

list - 为什么改变事实的顺序会改变谓词的行为?

转载 作者:行者123 更新时间:2023-12-01 05:28:53 29 4
gpt4 key购买 nike

这是我的第一个想法:

perm([X|Y],Z) :- takeout(X,Z,W), perm(Y, W).   
perm([],[]).

当我尝试运行时 -? perm([1, 2, 3], P). ,它显示了堆栈溢出问题。

但是如果我们改变两个语句的顺序,它就会起作用。
perm([X|Y],Z) :- perm(Y, W), takeout(X,Z,W).  
perm([],[]).

为什么?我是Prolog初学者,请帮助。

最佳答案

takeout/3你所指的俗称select(X, Xs0, Xs)
这是另一个定义 - 说明 DCG 的不常见用法。

perm(Xs,Ys) :-
phrase(perm(Xs),[],Ys).

perm([]) --> [].
perm([X|Xs]) --> perm(Xs), ins(X).

ins(X),[X] --> [].
ins(X),[Y] --> [Y], ins(X).

关于list - 为什么改变事实的顺序会改变谓词的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8071018/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com