2015-05-15 3 views
3

Итак, я создаю этот код, где есть функция, которая получает 2 аргумента и сообщает, если один из них не является списком.Код Prolog дает два разных результата:

Код следующее:

/*** List Check ***/ 
islist(L) :- L == [], !. 
islist(L) :- nonvar(L), aux_list(L). 
aux_list([_|_]). 

/*** Double List Check ***/ 
double_check(L, L1) :- \+islist(L) -> write("List 1 invalid"); 
    \+islist(L1)-> write("List 2`invalid"); write("Success"). 

Это shuold работать. Online код делает именно то, что я хочу. Но на консоли Prolog моего компьютера он дает совершенно другой ответ:

?- double_check(a, [a]). 
[76,105,115,116,97,32,49,32,105,110,118,97,108,105,100,97] 
true. 

пример. У меня нет ИДЕИ, откуда этот список. Может кто-нибудь сказать мне мою ошибку и помочь мне исправить это, пожалуйста? Спасибо вам всем!

+0

Что такое 'e_lista'? – lispHK01

+0

Мой плохой, у меня был код, написанный на португальском языке и переведенный. Я забыл об этом. Спасибо, что заметили! Ред. – Jataki

+0

Простите еще раз. Забыл удалить «a». Я долго не спал, дайте мне отдохнуть, ребята, lol jk. Спасибо за примечание. Теперь это исправлено! – Jataki

ответ

2

Быстрое исправление: используйте format/2 вместо write/1! Для получения дополнительной информации о встроенном предикате format/2, click here.

$ swipl --traditional 
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.37) [...] 

?- write("abc"). 
[97,98,99]        % output by write/1 via side-effect 
true.          % truth value of query (success) 

?- format('~s',["abc"]). 
abc          % output by format/2 via side-effect 
true.          % truth value (success) 

Однако с различными аргументами командной строки:

$ swipl 
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.37) [...] 

?- write("abc"). 
abc 
true. 

?- format('~s',["abc"]). 
abc 
true. 

Хотя это может показаться, как неприятность, я рекомендую использовать параметр командной строки --traditional для SWI-Prolog, в сочетании с format/2 вместо write/1 , Preserve !

+0

Я вижу ... Я никогда не пользовался или не слышал о функции формата. Может быть, из-за этого? Является ли моя функция печатью без формата? Если да, то как я могу сделать печать хорошо? Редактировать: Я теперь верю, что это моя проблема! Я попытался напечатать «ola» и распечатал список. Пожалуйста, помогите мне исправить это! – Jataki

+0

Но ... Почему это происходит? Я что-то испортил с помощью библиотек Prolog? Или это настройка/определения? – Jataki

+0

Хорошо, спасибо вам большое за помощь, сэр, я действительно ее оцениваю! Отмечено, как принято! Если он не спрашивает слишком много, можете ли вы, пожалуйста, помочь мне его распечатать, предоставив мне первый аргумент 'format/2'? – Jataki

Смежные вопросы