Это будет мой первый вопрос о переполнении стека.
Я читал руководство learnPrologNow, а затем начал делать упражнения в главе 3, ответы, которые дал мой компилятор, были не такими, как я ожидал (и я не думаю, что должен был выйти). Таким образом, я проверил его с примерами книга дала мне:
база знаний:Компилятор LearnPrologNow не работает должным образом
child(anne,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y) :- child(X,Y).
descend(X,Y) :- child(X,Z), descend(Z,Y).
Поэтому я попросил компилятор:
12 ?- descend(bridget,caroline).
true ;
false.
13 ?- descend(caroline,bridget).
false.
Где вторая ложь (12) происходят из ? Это также произошло в Excersise 3.2 (которого я взял со страницы GitHub, чтобы проверить правильный) с базой знаний:
greater_than(succ(X),0).
greater_than(succ(X),succ(Y)) :-
greater_than(X,Y).
с ответами:
14 ?- [ex32].
Warning: c:/users/user/documents/prolog/ex32.pl:1:
Singleton variables: [X]
true.
15 ?- greater_than(3,2).
false.
16 ?- greater_than(2,3).
false.
Я использую SWI-Prolog 7.2 .3 64-разрядная версия.
Любые предложения, что может быть неправильным?
Добро пожаловать в Stack Overflow! Я отредактировал ваш вопрос. Если вы не согласны с моим редактированием, вы можете отбросить его назад. Чтобы перевернуть править назад, нажмите ссылку «отредактировано ... назад». Это приведет вас к истории изменений, где находятся кнопки отката. Кроме того, рассмотрел ваш вопрос, потому что вы показываете, что провели какое-то исследование перед публикацией здесь. Наслаждайтесь своим пребыванием! –
Поскольку часто бывает сложно объяснить, что именно происходит, вводные учебники предпочитают даже не пытаться объяснить. Это вопрос вкуса. Это по-прежнему лучший доступный учебник онлайн. –