0 Daumen
240 Aufrufe

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.

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community