Prolog返回结果

ark*_*ate 1 syntax prolog prolog-dif

对于家庭作业,所以没有明确的,请:

有没有办法让Prolog只返回程序找到的第一个目标而忽略了找到的其他目标?

为说明目的,给定程序:

permutation([X|Xs],Zs):-permutation(Xs,Ys), insert(X,Ys,Zs).
permutation([],[]).
Run Code Online (Sandbox Code Playgroud)

有没有办法让程序只返回第一个排列作为唯一的解决方案?在以下情况中:

| ?- permutation([1,2,3],X).

X = [1,2,3] ? ;

X = [1,3,2] ? ;

X = [2,1,3] ? ;

X = [2,3,1] ? ;

X = [3,1,2] ? ;

X = [3,2,1] ? ;

no
Run Code Online (Sandbox Code Playgroud)

我们可以吗?

X = [1,2,3] ?;
no
Run Code Online (Sandbox Code Playgroud)

作为解决方案?

Cap*_*liC 6

这是你正在寻找的控制.把它放在需要提交解决方案的地方(我猜这里是顶级的).还有内置的一次/ 1,它允许在本地限制提交的范围(例如在findall/3中内联的连接中有用).