Как написать квадратную скобку в прологе? - PullRequest
3 голосов
/ 08 ноября 2010

Это может звучать странно, но это используется в парсере, я хочу иметь возможность анализировать что-то в форме

Foo [бар]

Так что это будет представлено в списке как:

[foo, [, bar, [] Может быть, такое слово будет написано в DCG как:

x --> id [[] arg []]

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

Ответы [ 2 ]

4 голосов
/ 08 ноября 2010

Разве вы не можете рассматривать ваши квадратные скобки как атомы (то есть '[' и ']') вместе со всем остальным?

Как насчет примера :

label1(T) --> id(X), label2(Y), {T =.. [X, Y]}.
label2(Y) --> ['['], innerexp(Y), [']'].
id(X) --> [X].
innerexp(Y) --> [Y].

Исполнение:

?- phrase(label1(T), [foo, '[', bar, ']'], Rem).
T = foo(bar),
Rem = [].
0 голосов
/ 08 ноября 2010

"[" (в кавычках) делает трюк?

...