Victor Fors pirms 2 gadiem
vecāks
revīzija
b6a3daaa13
1 mainītis faili ar 25 papildinājumiem un 19 dzēšanām
  1. +25
    -19
      kekkonen.scm

+ 25
- 19
kekkonen.scm Parādīt failu

@@ -339,9 +339,9 @@
(cond ((procedure? function) (cond ((procedure? function)
(apply function args)) (apply function args))
((list? function) ((list? function)
(let ((function-arguments (cadr function))
(function-body (cddr function)))
(lisp function-body (cons (if (= (length function-arguments) (length argument-values))
(let ((function-arguments (car function))
(function-body (cdr function)))
(lisp function-body (cons (if (= (length function-arguments) (length args))
(map cons function-arguments args) (map cons function-arguments args)
(lisp-exit "Wrong number of arguments to function")) environments) lisp-exit))) (lisp-exit "Wrong number of arguments to function")) environments) lisp-exit)))
(else (lisp-exit "attempt to call atom")))) (else (lisp-exit "attempt to call atom"))))
@@ -349,8 +349,7 @@
(define (lisp-eval body) (define (lisp-eval body)
(cond ((symbol? body) (reference body)) (cond ((symbol? body) (reference body))
((atom? body) body) ((atom? body) body)
((list? body) (let ((ln (map lisp-eval body)))
(lisp-apply (car ln) (cdr ln))))
((list? body) (lisp-apply (lisp-eval (car body)) (cdr body)))
(else (lisp-exit "Unknown value type in evaluation.")))) (else (lisp-exit "Unknown value type in evaluation."))))
(define (bind name value) (define (bind name value)
@@ -377,41 +376,48 @@
(_ (lisp-exit "malformed quote expression"))))) (_ (lisp-exit "malformed quote expression")))))
(cons . ,(lambda function-args (cons . ,(lambda function-args
(match function-args (match function-args
((a b) (cons a b))
((a b) (cons (lisp-eval a) (lisp-eval b)))
(_ (lisp-exit "malformed cons expression"))))) (_ (lisp-exit "malformed cons expression")))))
(car . ,(lambda function-args (car . ,(lambda function-args
(match function-args (match function-args
((a) (if (atom? a)
(lisp-exit "tried to take car of atom")
(car a)))
((a) (let ((e (lisp-eval a)))
(if (atom? e)
(lisp-exit "tried to take car of atom")
(car e))))
(_ (lisp-exit "malformed car expression"))))) (_ (lisp-exit "malformed car expression")))))
(cdr . ,(lambda function-args (cdr . ,(lambda function-args
(match function-args (match function-args
((a) (if (atom? a)
(lisp-exit "tried to take cdr of atom")
(cdr a)))
((a) (let ((e (lisp-eval a)))
(if (atom? e)
(lisp-exit "tried to take cdr of atom")
(cdr e))))
(_ (lisp-exit "malformed cdr expression"))))) (_ (lisp-exit "malformed cdr expression")))))
(atom . ,(lambda function-args (atom . ,(lambda function-args
(match function-args (match function-args
((a) (atom? a))
((a) (let ((e (lisp-eval a)))
(atom? e)))
(_ (lisp-exit "malformed atom expression"))))) (_ (lisp-exit "malformed atom expression")))))
(eq . ,(lambda function-args (eq . ,(lambda function-args
(match function-args (match function-args
((a b) (equal? a b))
((a b) (let ((ea (eval a))
(eb (eval b)))
(equal? ea eb)))
(_ (lisp-exit "malformed eq expression"))))) (_ (lisp-exit "malformed eq expression")))))
(set . ,(lambda function-args (set . ,(lambda function-args
(match function-args (match function-args
((a b) (if (symbol? a)
(bind a b)
(lisp-exit "tried to bind to non-symbol")))
((a b) (let ((ea (eval a))
(eb (eval b)))
(if (symbol? a)
(bind a b)
(lisp-exit "tried to bind to non-symbol"))))
(_ (lisp-exit "malformed set expression"))))) (_ (lisp-exit "malformed set expression")))))
(lambda . ,(lambda function-args (lambda . ,(lambda function-args
(match function-args (match function-args
((args exp . exps) ((args exp . exps)
(if (and (list? args) (every symbol? args)) (if (and (list? args) (every symbol? args))
(cons args (cons exp exps)) (cons args (cons exp exps))
(lisp-exit "malformed lambda expression"))
(_ (lisp-exit "malformed lambda expression"))))))))
(lisp-exit "malformed lambda expression")))
(_ (lisp-exit "malformed lambda expression")))))))
(lisp-eval body)) (lisp-eval body))




Notiek ielāde…
Atcelt
Saglabāt