小编Łuk*_*roz的帖子

生成列表[1,1,2,2,...,n,n]的所有排列,其中每对之间的元素数量均为Prolog

我最近开始学习Prolog,我有一个任务来编写一个list(N, L)生成列表L 的谓词,这样:

  • L的长度为2N,
  • 1和N之间的每个数字恰好在L中出现两次,
  • 在每对相同元素之间存在偶数个其他元素,
  • 每个数字的第一次出现的顺序递增.

作者说有N!这样的清单.

例如,对于N = 3,所有解决方案都是:

?- list(3, L).
L = [1, 1, 2, 2, 3, 3] ;
L = [1, 1, 2, 3, 3, 2] ;
L = [1, 2, 2, 1, 3, 3] ;
L = [1, 2, 2, 3, 3, 1] ;
L = [1, 2, 3, 3, 2, 1] ;
L = [1, 2, 3, 1, 2, 3] ;
false.
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案如下:

even_distance(H, [H | _]) :-
   !.
even_distance(V, [_, …
Run Code Online (Sandbox Code Playgroud)

algorithm prolog

8
推荐指数
1
解决办法
400
查看次数

标签 统计

algorithm ×1

prolog ×1