1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| 18192123 |
28.02.2009 20:18
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Здравствуйте!
Таково содержимое базы: Код %факты parent(petr,ivan). %petr - родитель для ivan parent(petr,olga). parent(lidia,ivan). parent(ivan,sergey). parent(ivan,oleg). parent(oleg,inna). %процедуры ancestor(A,B):-parent(A,B). ancestor(A,B):-parent(C,B),ancestor(A,C). brother(A,B):-parent(C,A),parent(C,B). %A - это брат B, если у них один родитель Проблема в том, что при, например, таком запросе (кто для ivan братья): Код ?- brother(X,ivan). X = ivan , X = olga , X = ivan , no ivan сам себе получается братом... подскажите пожалуйста, как подправить это? и ещё, как учесть, что может быть отношение брат, а может быть сестра..? Сообщение отредактировано: 18192123 - 28.02.2009 20:24 |
![]() ![]() |
| volvo |
28.02.2009 22:09
Сообщение
#2
|
|
Гость |
Почему же нельзя? Можно, тот же Турбо-Пролог нормально компилирует это. Но только тогда, когда в Predicates (не знаю, как это называется в твоем компиляторе, там, где пишутся прототипы всех функций) описаны прототипы Man и Woman
|
| 18192123 |
28.02.2009 22:32
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
...нормально компилирует это. Но только тогда, когда в Predicates (не знаю, как это называется в твоем компиляторе, там, где пишутся прототипы всех функций) описаны прототипы Man и Woman тоже не знаю, где у меня эти прототипы нужно описать.. ещё появился такой вариант: Код gander(petr,M). gander(ivan,M). gander(oleg,M). gander(sergey,M). gander(lidia,W). gander(olga,W). gander(inna,W). parent(petr,ivan). parent(petr,olga). parent(lidia,ivan). parent(ivan,sergey). parent(ivan,oleg). parent(oleg,inna). ancestor(A,B):-parent(A,B). ancestor(A,B):-parent(C,B),ancestor(A,C). brother(A,B):-parent(C,A),parent(C,B),not(A=B),gander(A,M). Проходит без ошибок, но никаких изменений в результатах...на запрос о братьях ivan выдает olga, хотя должно быть no... Код ?- brother(X,ivan). X = olga , no ?- |
18192123 Родственные отношения 28.02.2009 20:18
volvo Проверять на неравенство:
brother(A,B)... 28.02.2009 20:38
18192123
Проверять на неравенство:
brother(A,B)... 28.02.2009 20:44
volvo Ну, значит, ищи в хелпе, как в этом Прологе описыв... 28.02.2009 21:17
18192123
Можешь попробовать
[code]brother(A,B)... 28.02.2009 21:59
volvo Правильно делает... Ибо надо проверять не пол A, а... 28.02.2009 22:39![]() ![]() |
|
Текстовая версия | 8.12.2025 18:53 |