Я хочу выровнять третий столбец.
Обычно я не использую format / 2 с Prolog, потому что концепция вкладок просто сводит меня с умаорехи.Также я использую Prolog в основном для решения проблем ИИ, а не для пользовательского интерфейса, поэтому я привык читать и создавать вложенные структуры.
Это не лучший ответ о том, как использовать format/2
для выравнивания кода, но это работает.
everything_3 :-
give_birth(X),
give_eggs(Y),
format('~s~t~14|~s~t~25|~s~t~25|~n', ['Animal Name: ',X,'Gives Birth']),
format('~s~t~14|~s~t~25|~s~t~25|~n', ['Animal Name: ',Y,'Gives egg']),
fail.
с
give_birth(cheetah).
give_birth(tiger).
give_birth(zebra).
give_eggs(ostrich).
?- everything_3.
Animal Name: cheetah Gives Birth
Animal Name: ostrich Gives egg
Animal Name: tiger Gives Birth
Animal Name: ostrich Gives egg
Animal Name: zebra Gives Birth
Animal Name: ostrich Gives egg
false.
Сначала напечатать всех животных, которые рожают только 4 (остальные повторяются в этом выводе, я не знаю почему),а затем остальные животные, которые дают яйцо.
Когда я пишу это, Пауло Моура только что опубликовал эту часть ответа , который является тем же ответом, который я планировал дать,использование отказоустойчивого цикла с предикатом из трех предложений.
everything :-
give_birth(X),
format('Animal Name: \t~w, \tGives Birth', X), nl,
fail.
everything :-
give_eggs(Y),
format('Animal Name: \t~w, \tGives egg', Y), nl,
fail.
everything.
Вот два ответа в сочетании с примером выполнения.
everything_4 :-
give_birth(X),
format('~s~t~14|~s~t~25|~s~t~25|~n', ['Animal Name: ',X,'Gives Birth']),
fail.
everything_4 :-
give_eggs(Y),
format('~s~t~14|~s~t~25|~s~t~25|~n', ['Animal Name: ',Y,'Gives egg']),
fail.
everything_4.
?- everything_4.
Animal Name: cheetah Gives Birth
Animal Name: tiger Gives Birth
Animal Name: zebra Gives Birth
Animal Name: ostrich Gives egg
true.