From 677d2a38117bbcc0d7599e5a2f556c3ff3d1f58b Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Sat, 15 Mar 2014 17:11:03 +1100 Subject: Input functions to get a list of words --- read.pro | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 read.pro diff --git a/read.pro b/read.pro new file mode 100644 index 0000000..a554a22 --- /dev/null +++ b/read.pro @@ -0,0 +1,52 @@ + + +% functions for obtaining a line of input text and parsing +% it into a list of words + +% prompt provides the user with a '>' prompt as well +% readList merely obtains and parses the input + + +prompt(L) :- + write('> '), + readList(L). + + +readList(L) :- + readLine(X), + wordList(L,X,[]), !. + + +readLine(L) :- + get0(C), + buildList(C,L). + + +buildList(10,[]) :- !. +buildList(C,[C|X]) :- + get0(C2), + buildList(C2,X). + + +wordList([X|Y]) --> word(X), whitespace, wordList(Y). +wordList([X]) --> whitespace, wordList(X). +wordList([X]) --> word(X). +wordList([X]) --> whitespace, word(X). + + +word(W) --> charList(X), {name(W,X)}. + + +charList([X|Y]) --> char(X), charList(Y). +charList([X]) --> char(X). + + +char(X) --> [X], {X>=33}. + + +whitespace --> whsp, whitespace. +whitespace --> whsp. + + +whsp --> [X], {X<33}. + -- cgit