2017-01-08 40 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

哦,这是真的。我会修复它 –