Для ввода и вывода термов используются встроенные предикаты read(X) и write(X). Особенности применения этих предикатов к атомам и строкам иллюстрируются следующими примерами:
'программа':-write('введите X='),read(X),nl,
write('X='),tab(2),write(X),nl.
?-'программа'.
введите Х='моя_семья'.
X='моя_семья'
'программа 1':-write('введите строку'),read(X),nl,
write("введите строку"),nl,
write(X),nl.
?-'программа 1'.
'введите строку' "новый дом".
[162,162,165,164,168,226,165,32,225,226,224,174,170,227] [173,174,162,235,169.32,164,174,172]
Полученный во второй программе ответ кажется удивительным: вместо фразы "введите строку" "новый дом" получены два списка с целыми числами. Но если вспомнить определение строки в двойных кавычках, все становится понятным. Переменная X и константа "введите строку" принимают значения списков кодов символов соответствующих строк, которые затем выводятся на экран с помощью предиката write.
Приведенные примеры показывают, что вводить последовательность символов для последующей обработки можно и в виде атома и в виде строки в двойных кавычках, наглядность при этом не теряется. А выводить нужно только после преобразования строки в атом. Схема обработки строки имеет вид:
‘Обработать строку’(At1,At2):-
atom(At1), name(At1,St1),
‘операция_со_строкой’(St1,St2),
name(At2,St2).
‘Обработать строку’(At1,At2):-
‘операция_со_строкой’(St1,St2),
name(At2,St2).
|