2014-11-21 71 views
1

我學習方案,併爲實例和實踐metacircular解釋工作,和我收到以下錯誤:綁定標識符 - DrRacket

set-car!: unbound identifier in module in: set-car! 

,是由下面的代碼導致錯誤:

(define (add-binding-to-frame! var val frame) 
    (set-car! frame (cons var (car frame))) 
    (set-cdr! frame (cons val (cdr frame)))) 

我有兩個問題......首先,錯誤是什麼意思?其次,我錯過了一個let函數嗎?

+1

檢查這個問題,它可以幫助http://stackoverflow.com/q/9475366/1197333 – Ivancho 2014-11-21 18:15:47

+1

#球拍(完全不同的語言比計劃)不是!有'set-car!'和'set-cdr!'。改用#!r6rs。 – Sylwester 2014-11-21 18:18:37

回答

1

在球拍由cons分配的一對是不可變的設計 - 因此沒有set-car!。要分配可變對,請使用mcons。要突變可變對,請使用set-mcar!set-mcdr!

這是一個完整的程序:

#lang racket 
(define p (mcons 1 2)) 
(set-mcar! p 3) 
p 
+0

進行了相應的更改,並且仍然收到相同的錯誤。儘管謝謝你的回答。 – choloboy 2014-11-21 18:52:00

+1

我已經添加了一個完整的程序。請注意,mcons,mcar,mcdr,set-mcar!和set-mcdr由球拍/底座輸出。如果您正在使用一種語言,使用(要求(僅限 - 在球拍/基礎mcons mcar mcdr set-mcar!set-mcdr!)),其中可變版本從一開始就不包括在內。 – soegaard 2014-11-21 18:58:43