これは奇妙に聞こえるかもしれませんが、パーサーで使用されているので、フォームの何かを解析できるようにしたいと思います
foo [bar]
したがって、これはリストで次のように表されます。
[foo、[、bar、[]たぶんそのような単語はDCGで次のように書かれるでしょう:
x --> id [[] arg []]
問題は、角括弧が予約文字であるということです。それで、これをプロローグでどのように表すことができますか?
これは奇妙に聞こえるかもしれませんが、パーサーで使用されているので、フォームの何かを解析できるようにしたいと思います
foo [bar]
したがって、これはリストで次のように表されます。
[foo、[、bar、[]たぶんそのような単語はDCGで次のように書かれるでしょう:
x --> id [[] arg []]
問題は、角括弧が予約文字であるということです。それで、これをプロローグでどのように表すことができますか?
角かっこを他のすべてのものと一緒にアトム(つまり、、)として扱うことはできませ'['
ん']'
か?
どうですか、例えば:
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 = [].
"["
(引用符で)トリックを行いますか?