![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Здравствуйте!
Таково содержимое базы: Код %факты 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 |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата ivan сам себе получается братом... Проверять на неравенство:подскажите пожалуйста, как подправить это? Код brother(A,B):-parent(C,A),parent(C,B),A<>B. %A - это брат B, если у них один родитель Цитата и ещё, как учесть, что может быть отношение брат, а может быть сестра..? Ввести понятия "Мужчина" и "Женщина" и проверять на принадлежность к соответствующему полу... |
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ну, значит, ищи в хелпе, как в этом Прологе описывается неравенство... Можешь попробовать
Код brother(A,B):-parent(C,A),parent(C,B),not(A=B). . У меня нет ничего специфичного, обычный Турбо-Пролог понимает и тот и другой вариант. |
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Можешь попробовать Код brother(A,B):-parent(C,A),parent(C,B),not(A=B). .Спасибо! Получилось! Теперь попыталась добавить понятия мужчина, женщина: Код parent(petr,olga). parent(lidia,ivan). parent(ivan,sergey). parent(ivan,oleg). parent(oleg,inna). Man(petr). Man(ivan). Man(oleg). Man(sergey). Woman(lidia). Woman(olga). Woman(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),Man(A). Компилятору не понравились строчки с этими понятиями: Код Man(petr). %....и т. д. Скажите пожалуйста, так нельзя, как я пытаюсь сделать? |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Почему же нельзя? Можно, тот же Турбо-Пролог нормально компилирует это. Но только тогда, когда в Predicates (не знаю, как это называется в твоем компиляторе, там, где пишутся прототипы всех функций) описаны прототипы Man и Woman
|
18192123 |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
...нормально компилирует это. Но только тогда, когда в 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 ?- |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата на запрос о братьях ivan выдает olga Правильно делает... Ибо надо проверять не пол A, а пол B, ведь на запрос "brother(olga, X)" ты ожидаешь, что именно Брат - мужчина, но никак не Ольга, правда?Добавлено через 2 мин. Брррр... У тебя все перепутано тут... brother(X, ivan) не означает, что надо перечислить всех братьев Ивана, а означает, что надо перечислить всех, кому Иван является братом... А это разные вещи... Делай запрос так: brother(ivan, X), и проверяй пол у второго параметра, а не у первого... |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 13:27 |