Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conspekt.doc
Скачиваний:
11
Добавлен:
31.08.2019
Размер:
1.39 Mб
Скачать

5.15 Предикаты проверки типов термов

( var, nonvar, integer, atom, atomic )

integer(X) - результат true, если X - целое число или

Х - переменная, имеющая целое значение.

... , integer(X), integer(Y), Z is X//Y. - если неверно,

что X и Y -

целые, то де-

ление выпол-

няться не бу-

дет.

var(X) - результат true, если X - неконкретизированная

переменная.

nonvar(X) - результат true, если X - конкретизированно

или X - это объект, который отличается от пе-

ременной.

atom(X) - результат true, если X - атом.

atomic(X) - результат true, если X - атом или целое.

?- var(Z),Z=Z. ?- atom(22).

Z=Z no. ( число - не атом !!! )

?- Z=Z,var(Z). ?- atomic(22).

no. yes.

?- integer(Z),Z=Z. ?- atom(==>).

no.(т.к. Z- некон- yes.

кретизированно )

?- Z=2,integer(Z). ?- atom(P(X,A)).

yes. no.

Пусть имеется последовательность, посчитаем сколько раз некоторый атом входит в список.

счетчик(A,S,N). - где N - кол-во раз, сколько атом A

входит в список S.

счетчик(_, [], 0).

счетчик(A, [H|L], N) :-

atom(H), A=H, !, счетчик(A, L, N1),

N is N1+1;

счетчик(A, L, N).

5.16 Создание и декомпозиция термов

( =.., functor, arg )

Терм =.. L - цель истинна, если L - список, начинается с

главного функтора-терма, вслед за которым

следуют его аргументы.

?- f(x,y) =.. L - Этот предикат позволяет разобрать

L = [f,x,y ] выражение в список и собрать список

в выражение.

?- T =.. [треугольник,5,10,13].

T = треугольник(5,10,13).

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

 functor(<терм>, F, N) . - истина, если F - главный функтор

терма, а N - арность F.

 arg(N, терм, A) . - истина, если А - N-й аргумент в терме,

в предположении, что нумерация аргу-

ментов идет слева направо и начинается

с 1.

?- functor( t(a,f(x,y),z), F, N ).

F = t;

N = 3.

?-arg( 2, t(a,f(x,y),z), A).

A = f(x,y).

?- functor(D,дата),

arg(1,D,26), D = дата(,,).

arg(2,D,апрель), D = дата(26,,).

arg(3,D,1994). D = дата(26,апрель,1994).

В последнем примере иллюстрируется создание обобщенного терма с главным функтором дата и тремя аргументами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]