2017-12-05 12 views
1

私はPrologでDCGを構築しました。Prologで "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

基本的な問題は、文法で文字と数字を定義した方法です。あなたは1は整数と"1"['1']であることを最初

:- set_prolog_flag(double_quotes, chars). 

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

number(1) --> "1". 

注意が必要

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

:私はあなたが一緒に何かを定義したと仮定します!

関連する問題