2017-01-08 59 views
0

我需要somenthing這樣的:如何在PROLOG中執行序列「If,Else If and Else」?

if(list.contains(var)){ 
    //do something 
}else if(list.contains(anotherVar1)){ 
    //do something 
}else if(list.contains(anotherVar2)){ 
    //do something 
}else if(list.contains(anotherVar3)){ 
    //do something 
}else{ 
    // do something 
} 

編輯:

抱歉,我犯了一個錯誤。我需要這樣的:

if(list1.contains(var)){ 
    //do something 
}else if(list2.contains(var)){ 
    //do something 
}else if(list3.contains(var)){ 
    //do something 
}else if(list4.contains(var)){ 
    //do something 
}else{ 
    // do something 
} 

我想這一點,但else從未發生過:

((member(C,L1)-> print('first')); 
(member(C,L2)-> print('second')); 
(member(C,L3)-> print('third')); 
(member(C,L4)-> print('fourth'))); 
(print('else')). 

C是一種元素,我檢查,如果它是任何名單中的成員

+0

我定義'測試(C,L1,L2,L3,L4)'你定義和'test(1,[],[],[],[])'打印'else' – coredump

回答

0

我確認說什麼的內核轉儲:你的代碼打印「其他」。

打印到很多「其他」。

我試着

wichList(C, L1, L2, L3, L4) :- 
    ((member(C,L1)-> print('first')); 
    (member(C,L2)-> print('second')); 
    (member(C,L3)-> print('third')); 
    (member(C,L4)-> print('fourth'))); 
    (print('else')). 

,並在調用wichList(1, [], [], [], []),我看 「別人」。

無論如何,你的代碼是錯誤的,因爲調用wichlist(1, [], [1], [], []),我首先看到「second」,然後看到「else」。

這是括號的問題:你應該關閉的 「如果」 print('else')之後,而不是之前的括號,所以

wichList(C, L1, L2, L3, L4) :- 
((member(C,L1)-> print('first')); 
(member(C,L2)-> print('second')); 
(member(C,L3)-> print('third')); 
(member(C,L4)-> print('fourth')); 
(print('else'))). 
1

你類似C的原始代碼需要使用一個列表和一些元素,所以我猜想,在你的Prolog的例子中,C是列表和L1,L2,L3L4都是el對此語句。

但是,據我所知,SWI-Prolog中的member/2子句要求元素位於第一位,列表位於第二位。

所以我猜想,叫memeber/2,你應該用元素切換列表,所以

((member(L1,C)-> print('first')); 
(member(L2,C)-> print('second')); 
(member(L3,C)-> print('third')); 
(member(L4,C)-> print('fourth'))); 
(print('else')) 
+0

對不起,我沒有說得很清楚,但C是元素,L1,L2, L3和L4是列表 –

+1

@Éowyn - 我看到...呃...所以你的類似c的例子應該像'if(list1.contains(var)){} else if(list2.contains(var)) {} ...' – max66

+0

哦,這是真的。我會修復它 –