[racket] Code Error Creating List
Todd D:
1. This code must be the worst formatted Racket code I have seen in a long time. Please read EOPL and follow its example.
2. Next, when DrRacket tells you that a particular sub-expression in your program raised an error, please -- pretty please -- pay attention. I removed the superfluous parts of your program, added the one-line ddt, ran free-vars-list on a simple var-exp and immediately got the correct highlighting:
#lang eopl
(define-datatype expression expression? (var-exp (id symbol?)))
(define free-vars-list
(lambda (body)
( ;; <<================================== pink starts
(if (list? body)
(append (free-vars-list (car body)) (free-vars-list (cdr body)))
(cases expression body
;; When we have a var-exp, return the variable
(var-exp (id) id)
(else (list 'fvl "can't happen")))
)
)
) ;; <<================================= pink ends
)
(free-vars-list (var-exp 'x))
3. What are these parens doing here? Let me rewrite this here:
(define free-vars-list
(lambda (body)
( (if (list? body) ... ...) )
)
)
[I sincerely apologize for the last two lines.]
As you can see now, your if expression is the function position of an application. Why?