处理用户输入"短语/ 3" Prolog中的方法

时间:2017-12-05 12:47:26

标签: prolog swi-prolog dcg

我用Prolog构建了一个DCG。当我执行以下调用时,代码可以工作:

phrase(programm(R), [1,+,2], []).

我希望用户写入输入,所以我这样做了:

main :- read(Input), atom_chars(Input, R), write(R), phrase(programm(E), R).

呼叫主要和输入,例如' 1 + 2'不起作用。如何处理用于调用DCG的短语方法的用户输入?

2 个答案:

答案 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).