簡體   English   中英

Prolog按位置排序列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM