Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Примеры, демонстрирующие предикат write

Эти примеры показывают, как можно использовать предикат write для

того, чтобы получить возможность с помощью ваших предикатов выводить на

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

1. Программа CH12EX01.PRO печатает список без открывающей и

закрывающей квадратной скобки ( [] ).

/* Program CH12EX01.PRO - Печать списка без скобок */

domains

integerlist = integer*

namilist = symbol*

predicates

writelist(integerlist)

writelist(namilist)

clauses

writelist([]).

writelist([H|T]):-write(H," "),writelist(T).

Обратите внимание, как это программа использует рекурсию для

обработки списка. Попробуйте ввести в программу и исполнить

такую цель:

writelist ([1,2,3,4]).

2. В следующем примере программа CH12EX02.PRO выводит элементы

списка не более чем по пять элементов на строке.

/* Program CH12EX02.PRO - Печать по пять элементов на

строке */

domains

integerlist = integer *

predicates

writelist(integerlist)

write5((integerlist,(integer)

clauses

writelist(NL) :-nl,write5(TL,0).

write5([H|T],N) :-!,write(H," "),

N1=N+1,write5(T,N1)

write5([],_).

Если вы дадите программе такую цель:

writelist([2,4,6,8,10,12,14,16,18,20,22]).

Турбо Пролог ответит:

2 4 6 8 10

12 14 16 18 20

22

3. Часто вы можете захотеть иметь предикат, который выводит

сложные струртуры данных в более удобном для чтения виде.

Программа CH12EX03.PRO выводит обекты типа:

plus(mult(x, number(99)), mult( number(3), x))

в виде

x * 99 + 3 * x

(Это называется инфиксной записью.)

/* Program CH12EX03.PRO - Печать выражений в более

читаемой форме*/

domains

expr = number(integer);x;log(expr);

plus(expr,expr);mult(expr,expr)

predicates

writeExp(x) :-write(x).

clauses

writeExp(x) :-write('x').

writeExp(number(No)) :-write(No).

writeExp(log(Expr)) :- write("log(") ,

writeExp(Expr) ,

write(')').

writeExp(plus(U1,U2)):-writeExp(U1),write('+'),writeExp

(U2).

writeExp(mult(U1,U2)):-writeExp(U1),write('*'),writeExp

(U2).

4. Программа CH12EX04.PRO похожа на программу CH12EX03.PRO.

/* Program CH12EX04.PRO - Печать предложений */

domains

sentence = sentence (nounphrase,verbphrase)

nounphrase= nounp(article,noun);name(name)

verbphrase=

verb(verb);verbphrase(verb,nounphrase)

article,noun,name,verb=symbol

predicates

write_ sentence (sentence )

write_ nounphrase(nounphrase)

write_ verbphrase(verbphrase)

clauses

write_ sentence (sentence (S,V)):-

write_nounphrase (S) , write_verbphrase (V)

write_nounphrase(nounp(A,N)):-write(A,'',N,'').

write_nounphrase(name(N) :-write(N,'')).

write_ verbphrase(verb(V)) :-write(V,'').

write_ verbphrase(verbphrase(V,N) :-

write(V,''),write_nounphrase(N).

Попробуйте программу CH12EX04.PRO с такой целью:

write sentence (sentence(name(bill),verb(jumps))).

Соседние файлы в папке Документация