Come analizzare l'input standard (senza buffering)? Se ho capito bene, phrase/2
ha bisogno di un elenco e phrase_from_file/2
da library(pure_input)
ha bisogno di un file.Analisi dall'input standard
ho risolto il problema usando predicati normali (non DCG) e l'utilizzo di built-in come get_char/2
e read_line_to_codes/2
, ma alla fine l'attuazione sembra sospettosamente simile alla soluzione avrei scritto in C.
E se Posso introdurre una domanda molto correlata: che cos'è lo standard input in SWI-Prolog? read_line_to_codes
(library(readutil)
) richiede un flusso di input (a differenza di get/1
, ad esempio). Ho capito con il seguente predicato:
input_stream(Stream) :-
current_stream(Object, read, Stream),
integer(Object).
. . . che ovviamente funziona, ma si sente un po 'violato. È possibile avere più di un flusso di input aperto? Come faccio a sapere qual è l'input standard del sistema operativo (Linux nel mio caso)?
Pensavo di aver letto questa pagina abbastanza attentamente ... Questo risponde alla mia domanda di input standard. Ancora non so se posso usare DCG per analizzare l'input standard. –
sì, usa un ciclo come 'repeat, read_line_to_codes (user_input, L), phrase (your_grammar, L) .' – CapelliC