Пролог — необычный синтаксис cons для списков

Я наткнулся на незнакомый фрагмент синтаксиса Пролога в статье Ли НейшаЛогическое программирование высшего порядка на Прологе. Вот первый пример кода из статьи:

% insertion sort (simple version)
isort([], []).
isort(A.As, Bs) :-
    isort(As, Bs1),
    isort(A, Bs1, Bs).

% insert number into sorted list
insert(N, [], [N]).
insert(N, H.L, N.H.L) :-
    N =< H.
insert(N, H.LO, H.L) :-
    N > H,
    insert(N, LO, L).

Меня смущает A.Asв isort(A.As, Bs) :-. Из контекста кажетсяальтернативным синтаксисом cons для списков, эквивалентным isort([A|As], Bs) :-.

Кроме того, N.H.Lкажется более удобным способом сказать [N|[H|L]].

Но SWI Prolog не примет этот необычный синтаксис (если только я не делаю что-то неправильно).

Кто-нибудь узнает его? моя гипотеза верна? Какой интерпретатор Пролога принимает этот синтаксис как допустимый?

27
задан false 5 April 2012 в 13:36
поделиться