[英]Prolog sorting lists by position
我对Prolog还是很陌生,我正在尝试浏览一个列表,并检查每个元素是否在列表的正确位置。 例如,假设您有一个颜色列表,并且每种颜色都分配了一个数值0或1。我想检查列表中所有偶数位置的值为0,奇数位置的值为1(开始列表)在0时是偶数)。
red = 0
blue = 1
yellow = 0
orange = 1
green = 1
list1 = [red, blue, yellow, orange]
list2 = [red, yellow, orange, blue]
所以基本上在上面的示例中,我希望列表1的值变为[0,1,0,1]时返回true,而list2的值变为[0,0,1,1]时返回false
对于任何编程语言,必须遵循其语法规则。 您的代码似乎是Javascript,而不是Prolog。 可以代替
color(red, 0).
color(blue, 1).
...
colors(list1, [red, blue, yellow, orange]).
...
完成后,我们可以写
check_colors(List) :-
colors(List, Cs),
forall(nth0(I, Cs, C), (N is I mod 2, color(C, N))).
您最有可能需要用自己的“列表访问”替换forall / 2。 从I = 0开始
check_colors(List) :-
colors(List, Cs),
check_colors(Cs, 0).
并在递归调用之前将其递增。 递归将在空列表上完成(隐式地为true
)
check_colors([], _).
请尝试编写其余过程...
我想到的最简单的方法是:
color(red,0).
color(blue,1).
color(yellow,0).
color(orange,1).
color(green,1).
%base cases.
colors([X]):-color(X,_).
colors([]).
colors([X,Y|Xs]):-
color(X,Cx), %X is a color with Cx ( 0 or 1)
color(Y,Cy), %Y is a color with Cy ( 0 or 1)
\+member(X,[Y|Xs]), % X is not in the list
Cx=\=Cy, % they are different
colors([Y|Xs]). % continue recursion.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.