Я только что понял, как запустить gprolog, и новая проблема пролога смутила меня. Проблема относится к бинарному дереву поиска в прологе, предположиткак представлять функцию ИЛИ в прологе
8
/\
3 10
/\
1 6
здесь есть два вида фактов, которые оставили (X, Y), когда X является левый листа Y и вправо (X, Y), когда X является правый лист Y, поэтому я могу сказать левый (3,8) и левый (1,3) и правый (10,8) как мои факты. Выполнить правило выше (X, Y), когда X выше Y в терминах фактов? Так что я имею в виду, это X выше Y, если Y является левый лист X OR Y является правильным лист X.
Я попробовал правило
above(X,Y) :- left(Y,X); right(Y,X).
Когда я запускаю выше запрос (3 , 1) в gprolog. он спросил меня правду? когда я нажимаю enter, и он возвращает yes и когда я нажимаю «;» и он не возвращает ничего, потому что система продолжает искать второй гол «right (1,3)». Я просто странствую там, где это возможно, да, независимо от того, я нажимаю ввод или точку с запятой?
Да, вы правильно поняли. Причина, по которой я хочу это сделать, делает пролог более умным, если он может признать, что в одной из целей есть истина. Причина, когда я пробовал более правильное правило, как anywayabove (X, Y): X является предком Y, мне все равно нужно рассмотреть вопрос о продолжении поиска или не вопрос. Это своего рода мои вычисления, но не пролог. Я подумал: "; в пункте означает, что он возвращает да, если один из целей согласован независимо от того, что он ведет поиск или нет. Имеет ли это смысл? – user1234567
@ user1234567 Я не думаю, что это сделает пролог умнее. Но получайте удовольствие программирования, что новый компилятор! – ZakC