Проблема в вашем правиле для rint
.
В вашем определении сказано, что rint(L)
успешно, если write(H)
успешно.На этом этапе переводчик ничего не знает о H
.Таким образом, он записывает значение, которое он не знает, поэтому вы видите _L139
, внутреннее представление неинициализированной переменной.
Сделав это, write(H)
успешно выполнено, истинно так что rint(L)
верно.Переводчик говорит вам, что: true.
Чтобы определить свой собственный rint/1
, не полагаясь на встроенные модули, такие как display/1
, вам необходимо выполнить что-то вроде
rint([]) :-
write([]).
rint([H|T]) :-
write('.('),
write(H),
write(', '),
rint(T),
write(')').
Если вы пытаетесь отобразить пустой список, просто напишите его.Если вы пытаетесь отобразить любой другой список, напишите начальный период и круглые скобки, напишите заголовок, введите следующую запятую и пробел, , затем вызовите себя для хвоста списка , затем напишите закрывающую скобку.