2017-12-05 5 views
1

Ich habe eine DCG mit Prolog. Der Code funktioniert, wenn ich den folgenden Aufruf tun:Verarbeiten Benutzereingabe zu "Phrase/3" Methode in Prolog

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

Ich möchte der Benutzer die Eingabe zu schreiben, so dass ich tat dies:

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

Aufruf Haupt- und Eingangs z.B. '1 + 2' funktioniert nicht. Wie kann ich die Benutzereingabe in die Phrasenmethode zum Aufruf meiner DCG bearbeiten?

+0

Wenn 'phrase (programm (R), [1, +, 2], [])' funktioniert, wenn Sie es selbst ausführen, warum nicht verwenden, 'phrase (programm (E), R, [ ]) 'in deinem' Haupt' Prädikat? – lurker

Antwort

1

SWI-Prolog bietet eine handliche Möglichkeit, mittels 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

Vielen Dank! – Ubuntix

2

Das grundlegende Problem ist die Art, wie Sie Zeichen und Zahlen in Ihrer Grammatik definiert haben. Ich nehme an, Sie etwas definiert zusammen:

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

Sie müssen zuerst

:- set_prolog_flag(double_quotes, chars). 

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

number(1) --> "1". 

Beachten Sie, dass 1 eine ganze Zahl ist und "1" ist ['1']!

Verwandte Themen