我怎样才能完成序列" If,Else if and Else"在PROLOG?

时间:2017-01-08 15:25:27

标签: prolog

我需要像这样闷闷不乐:

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是一个元素,我正在检查它是否是任何列表的成员

2 个答案:

答案 0 :(得分:1)

你的c式原始代码需要使用列表和一些元素,所以我想在你的Prolog示例中,C是列表而L1,{{1} },L2L3是元素。

但据我所知,SWI-Prolog中的L4子句需要第一个位置的元素和第二个位置的列表。

所以我想,调用member/2,你应该用元素切换列表,所以

memeber/2

答案 1 :(得分:0)

我确认了Coredump所说的内容:你打印代码打印"否则"。

打印到很多"否则"。

我已经尝试了

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], [], []),我看到"第二个",一开始,"否则",下一个。

这是一个括号问题:你应该关闭&#34的括号;如果"在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'))).