Ich versuche vergeblich AND und OR in Racket selbst zu implementieren sozusagen.
Hier mein Code:
(define (mc-eval exp env)
(cond ((number? exp) exp)
((boolean? exp) exp)
((symbol? exp) (lookup-variable-value exp env))
((pair? exp) (mc-apply (mc-eval (car exp) env) (list-of-values (cdr exp) env)))
(else (error "Unknown expression type -- EVAL" exp))))
(define (mc-apply procedure arguments)
(cond ((tagged-list? procedure 'primitive) (apply-primitive-procedure procedure arguments))
((tagged-list? procedure 'test) (apply-test-procedure procedure arguments))
(else (error "Unknown procedure type -- APPLY" procedure))))
(define (lookup-variable-value var env)
(define val (assq var env))
(if (eq? val false)
(error "unbound variable" var)
(cdr val)))
(define (list-of-values exps env)
(if (null? exps)
'()
(cons (mc-eval (car exps) env) (list-of-values (cdr exps) env))))
(define (tagged-list? exp tag)
(if (pair? exp)
(eq? (car exp) tag)
false))
(define (apply-primitive-procedure proc args)
(apply-in-underlying-racket (car (cdr proc)) args))
(define (apply-test-procedure proc args)
(apply-in-underlying-racket (car(cdr proc)) args)) *
(define apply-in-underlying-racket apply)
(define myenv (list (cons 'and (list 'test 'and))))
(mc-eval '(and #t #t) myenv)
* Hier soll
and auf die Argumente angewendet werden, funktioniert nicht da ich
'and zurück bekomme. Wenn ich jedoch
and in die Liste schreibe gibt er mir eine Fehlermeldung zurück.
(define myenv (list (cons 'and (list 'test and))))
and: bad syntax in: and
Wäre toll, wenn mir jemand weiterhelfen könnte.