我用Prolog构建了一个DCG。当我执行以下调用时,代码可以工作:
phrase(programm(R), [1,+,2], []).
我希望用户写入输入,所以我这样做了:
main :- read(Input), atom_chars(Input, R), write(R), phrase(programm(E), R).
呼叫主要和输入,例如' 1 + 2'不起作用。如何处理用于调用DCG的短语方法的用户输入?
答案 0 :(得分:3)
根本问题在于你在语法中定义了字符和数字的方式。我假设你定义了一些东西:
program(sum(L,R)) -->
[L],
[+],
[R].
首先需要
:- set_prolog_flag(double_quotes, chars).
program(sum(L,R)) -->
number(L),
"+",
number(R).
number(1) --> "1".
请注意,1
是一个整数,"1"
是['1']
!
答案 1 :(得分:2)
SWI-Prolog通过tokenize_atom提供了一种便捷的方式。
program(sum(L,R)) --> [L, +, R].
?- tokenize_atom('1 + 2', L), phrase(program(P), L).
L = [1, +, 2],
P = sum(1, 2).