2013-11-25 3 views
1

- Правильно ли это указано ниже?Выполнение условия пролога

--Я хотите, если-то в другом месте высказывания интерпретировать как:

если сорт NC и курс CDC затем вызвать isNCinCDC или

если сорт NC и курс семинар затем вызвать isNCinCDC или

если сорт NC и курс тезис затем вызвать isNCinCDC или

если сорт NC и курс факультативных затем вызвать isNCinELEC или

, если сорт NC и конечно же тогда практика школы называют isNinPS или

если сорт NC и курс курсовая затем вызвать isNinPC

isNCCalc([],[],[]) :- 
display('There are no more courses to check for NC'). 

isNCCalc([G|T1],[S|T2],[C|T3]) :- 
    (((G == 'NC' , C == 'CDC') -> isNCinCDC(S)) ; 
    ((G == 'NC',C == 'SEMINAR'-> isNCinCDC(S)) ; 
    ((G == 'NC',C == 'THESIS' -> isNCinCDC(S)) ; 
    ((G == 'NC',C == 'ELECTIVES' -> isNCinELEC(S)) ; 
    ((G == 'NC',C == 'PRACTICE SCHOOL' -> isNCinPS(S)) ; 
    ((G == 'NC',C == 'PROJECT COURSE' -> isNCinPC(S)))), 
    isNCCalc(T1,T2,T3). 
+1

Вы попробовали? :) – lurker

+0

Для этого вам следует использовать ** факты **. – false

ответ

1

вы можете написать это более просто, потому что

3 ?- display((a,b->c)). 
->(,(a,b),c) 
true. 

4 ?- display(((a,b)->c)). 
->(,(a,b),c) 
true. 

т. Е. Конъюнкции (запятая) связывают более строго, чем импликацию (стрелка). Тогда

isNCCalc([G|T1],[S|T2],[C|T3]) :- 
    ( G == 'NC', C == 'CDC' 
    -> isNCinCDC(S) 
    ; G == 'NC', C == 'SEMINAR' 
    -> isNCinCDC(S) 
    ; G == 'NC', C == 'THESIS' 
    -> isNCinCDC(S) 
    ; G == 'NC', C == 'ELECTIVES' 
    -> isNCinELEC(S) 
    ; G == 'NC', C == 'PRACTICE SCHOOL' 
    -> isNCinPS(S) 
    ; G == 'NC', C == 'PROJECT COURSE' 
    -> isNCinPC(S) 
    ; true 
    ), 
    isNCCalc(T1,T2,T3). 

Я добавил верно, как последний вариант, так как либо вы можете переместить G == «NC» в голове, и упрощать больше, или цикл будет не в состоянии полностью, когда появляется G \ = «NC». Не уверен, вы не указали, что вы хотите в этом случае.

Смежные вопросы