From cf711ffd0ff349d91f24cf2a393d37a1b21d5391 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 30 Apr 2018 20:21:29 -0400 Subject: [PATCH] Added (repl) --- scheme/repl.sld | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/scheme/repl.sld b/scheme/repl.sld index 38f56fd0..fb148ca4 100644 --- a/scheme/repl.sld +++ b/scheme/repl.sld @@ -9,9 +9,49 @@ (define-library (scheme repl) (export interaction-environment - ) - (import (scheme eval)) + repl) + (import (scheme base) + (scheme eval) + (scheme read) + (scheme write)) (begin (define (interaction-environment) (setup-environment)) - )) + (define (repl) + (with-handler + (lambda (obj) + (display "Error: ") + (cond + ((error-object? obj) + (display (error-object-message obj)) + (if (not (null? (error-object-irritants obj))) + (display ": ")) + (for-each + (lambda (o) + (write o) + (display " ")) + (error-object-irritants obj))) + ((pair? obj) + (when (string? (car obj)) + (display (car obj)) + (if (not (null? (cdr obj))) + (display ": ")) + (set! obj (cdr obj))) + (for-each + (lambda (o) + (write o) + (display " ")) + obj)) + (else + (display obj))) + (newline) + (repl)) + (display "cyclone> ") + (let ((c (eval (read)))) + (cond + ((not (eof-object? c)) + (write c) + (newline) + (repl)) + (else + (display "\n"))))))))