logo
TurboProlog / Документация / TOM_1

Идентификаторы

Идентификаторы не могут непосредственно сравниваться из-за их син-

таксиса. В случае P1= peter, P2 ... например, идентификатор peter не мо-

жет непосредственно сравниваться с идентификатором sally. Они должны быть

связаны с переменными, которые сравниваются, или записаны как строки.

ГЛАВА 12. ЗАПИСЬ, ЧТЕНИЕ И ФАЙЛЫ

В этой главе мы впервые рассмотрим базовые встроенные предикаты для

чтения и записи. Далее мы опишем, как в Турбо Прологе, работает файловая

система и покажем, как вы можете направлять ввод и вывод в файлы. Мы так-

же рассмотрим домен file и несколько предопределенных файлов. Мы закончим

эту главу примером, который показывает, как вы можете использовать преди-

каты, работающие с файлами, для разработки базы данных на дисковом файле.

Запись и чтение

В данном описании большая часть вывода направлялась на экран, а

большая часть ввода осуществлялась с клавиатуры. В данной главе мы расс-

мотрим стандартные предикаты ввода-вывода и познакомим вас с парой преди-

катов, которые позволят вам выполнять чтение из файлов.

Запись

В Турбо Пролог включены три стандартных предиката для вывода. Это

предикаты write, nl и writef.

Предикаты write/* и nl

Предикат write может быть вызван с произвольным числом аргументов:

write( Param1, Param2, ... ParamN) /* (i, i, ... i) */

Эти аргументы могут быть либо константами из стандартных доменов,

либо переменными. Если это переменные, то они должны быть входными пара-

метрами.

Стандартный предикат nl (от new line - новая строка) всегда исполь-

зуется вместе с write. Он обеспечивает переход на новую строку на экране

дисплея. Например, следующие подцели:

pupli(PUPIL,CL),

write(PUPIL,"is in the",CL,"class"),

nl,

write("----------------------------------").

могут привести к выводу на экран такого результата:

Helen Smich is in the fourth class

----------------------------------

а следующая цель:

write("List1 = ",L1,", List2 = ",L2 ).

может дать:

List1 = [cow,pig,rooster], List2 = [1,2,3]

Так же, если My_sentence связана с

sentence (subject(john),sentenceVerb(sleeps))

то в следующей программе:

domains

sentence = sentence (subject,sentence_verb)

subject = subject (symbol);.....

sentence_verb = sentence_verb(verb);....

verb = symbol

clauses

....

write("SENTENCE=", My_sentence).

Вы сможете увидеть на дисплее:

SENTENCE = sentence(subject(john),sentenceVerb(sleeps))

Часто предикат write не дает вам много из того, чего бы вам хотелось

иметь при печати таких сложных объектов, как списки, но нетрудно написать

программы, которые позволяли бы работать с такими объектами. Следующие

несколько примеров иллюстрируют эти возможности.