2017-01-08 9 views
0

мне нужно somenthing так:Как я могу выполнить последовательность «If, Else if and Else» в 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 
} 

EDIT:

К сожалению, я сделал ошибку. Мне нужно это:

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')). 

С является элементом, и я проверяю, если он член какой-либо из списков

+0

Я определил 'тест (C, L1, L2, L3, L4)' с вашим определение, и 'test (1, [], [], [], [])' prints 'else' – coredump

ответ

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], [], []), сначала я вижу «второй» и «еще», следующий.

Это проблема скобки: вы должны закрыть скобки "если" после того, как 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, L3 и L4 являются el ements.

Но статья member/2 в SWI-Prolog, насколько мне известно, требует элемента в первой позиции и второго списка.

Так что я полагаю, что, называя 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

О, это правда. Я исправлю это –