Логическая задача - Prolog (226978)
Формулировка задачи:
Помогите решить задачку:
Левин, Митерев и Набатов работают в банке в качестве бухгалтера,
кассира и счетовода.
Если Набатов-кассир, то Митерев-счетовод.
Если Набатов-счетовод, то Митерев-бухгалтер.
Если Митерев-не кассир, то Левин-не счетовод.
Если Левин-бухгалтер, то Набатов-счетовод.
Кто какую должность занимает?
Мое решение такое:
Но не уверен, что верное.
Нашел что задача не имеет однозначного решения, поэтому надо добавить еще одно условие, им стало то, что Набатов-счетовод.
Решение задачи: «Логическая задача»
textual
Листинг программы
assertion1(L,M,N):-N=kassir,!,M=schet. assertion11(L,M,N):-M=schet,!,N=kassir. assertion2(L,M,N):- N=schet,!,M=buh. assertion22(L,M,N):-M=buh,!,N=schet. assertion3(L,M,N):-M=not(kassir),!,L=not(schet). assertion33(L,M,N):-L=not(schet),!,M=not(kassir). assertion4(L,M,N):- L=buh,!,N=schet. assertion44(L,M,N):-N=schet,!,L=buh. assertion1(_,_,_). assertion2(_,_,_). assertion3(_,_,_). assertion4(_,_,_). assertion11(_,_,_). assertion22(_,_,_). assertion33(_,_,_). assertion44(_,_,_). notravn(L,M,N):- L\=M,N\=M,L\=N,!. solve(L,M,N):- List=[kassir,schet,buh], member(L,List),member(M,List),member(N,List), assertion1(L,M,N),assertion11(L,M,N), assertion2(L,M,N),assertion22(L,M,N), assertion3(L,M,N),assertion33(L,M,N), assertion4(L,M,N),assertion44(L,M,N),notravn(L,M,N). ?-solve(L,M,N),write(L),nl,write(M),nl,write(N),nl.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д