2017-12-05 16 views
1

프롤로그로 DCG를 작성했습니다.프롤로그에서 "phrase/3"방법으로 사용자 입력 처리

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

나는 사용자가 입력을 쓰고 싶어, 그래서 나는이 한 : 코드는 내가 다음 호출을 수행 할 때, 작동

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

주요 입력 예를 들어, 호출을 '1 + 2'는 작동하지 않습니다. 내 DCG를 호출하기위한 구문 메서드에 대한 사용자 입력을 어떻게 처리합니까?

+0

'phrase (programm (R), [1, +, 2], [])'가 독자적으로 실행할 때 작동하는 이유는'phrase (programm (E), R, ])'당신의'main' 술어에서? – lurker

답변

1

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). 
+0

대단히 감사합니다! – Ubuntix

2

근본적인 문제는 문법에 문자와 숫자를 정의한 방식입니다. 난 당신을 따라 뭔가를 정의 가정 :

program(sum(L,R)) --> 
    [L], 
    [+], 
    [R]. 

가 먼저

1는 정수이며 "1"['1'] 것을
:- set_prolog_flag(double_quotes, chars). 

program(sum(L,R)) --> 
    number(L), 
    "+", 
    number(R). 

number(1) --> "1". 

주의가 필요합니다!