Now working in SWI Prolog
[lisp-interpreter-in-prolog.git] / lisp-interpreter.pl
index 2be75cd2bf0129771adf7cbae684d0d8f036d5c2..a036a73bede0836a9d830a1ec52fa059e63e21b5 100644 (file)
@@ -22,7 +22,8 @@
  *******************************************************************/\r
 \r
 \r
-:- style_check.\r
+:- style_check([+singleton, +no_effect, +var_branches, +atom, +discontiguous, \r
+       +charset]).\r
 \r
 :- dynamic \r
        bindings/1,\r
@@ -38,14 +39,15 @@ lisp:-
        write('Welcome to Pro-Lisp!'),nl,\r
        write('This is a miniscule Lisp interpreter, written in Prolog'),nl,\r
        prompt(Old, '> '),\r
-       prompts(Old1, Old2),\r
-       prompts('> ', '> '),\r
+       prompts(Old1, Old2),\r
+       prompts('> ', '> '),\r
        tidy_database,\r
        repeat,\r
        read_eval_print(Result),\r
        Result = quit,\r
        prompt(_, Old),\r
-       prompts(Old1, Old2).\r
+       % prompts(Old1, Old2).\r
+       true.\r
 \r
 \r
 tidy_database:-\r
@@ -212,7 +214,8 @@ read_and_parse(Expression):-
 % read a line of supposed Lisp code\r
 \r
 read_words(Words):-\r
-       get0(C),\r
+       % get0(C),\r
+       get_code(C),\r
        read_words(C, Words).\r
 \r
 read_words(C, []):-\r
@@ -232,14 +235,15 @@ read_words(C, [Word|Words]):-
        !,\r
        read_rest_of_word(Chars, LeftOver),\r
        name(UCWord, [C|Chars]),\r
-       ( atom(UCWord) -> lwrupr(Word, UCWord)\r
+       ( atom(UCWord) -> downcase_atom(UCWord, Word)\r
                ;       \r
                Word = UCWord),\r
        read_words(LeftOver, Words).\r
 \r
 \r
 read_rest_of_word(Chars, LeftOver):-\r
-       get0(C),\r
+       % get0(C),\r
+       get_code(C),\r
        read_rest_of_word(C, Chars, LeftOver).\r
 \r
 \r
@@ -321,8 +325,10 @@ writeTokenL(['(', ')'|TokenL]):-
 writeTokenL([Token|TokenL]):-\r
        atom(Token),\r
        !,\r
-       lwrupr(Token, UCToken),\r
-       write(UCToken),\r
+       % lwrupr(Token, UCToken),\r
+       % write(UCToken),\r
+       downcase_atom(Token, LCToken),\r
+       write(LCToken),\r
        write(' '),\r
        writeTokenL(TokenL).\r
 writeTokenL([Token|TokenL]):-\r