支持套车的方案!和设置CDR!在 sicp
scheme which support set-car! and set-cdr! in sicp
我正在阅读SICP 4.1.3 Evaluator Data Structures
(define (make-frame variables values)
(cons variables values))
(define (frame-variables frame) (car frame))
(define (frame-values frame) (cdr frame))
(define (add-binding-to-frame! var val frame)
(set-car! frame (cons var (car frame)))
(set-cdr! frame (cons val (cdr frame))))
然而,set-car!
在球拍中被报告为无界。
然后试了'GNU Guile 2.2.6'、"GNU mit-scheme 10.1.10"的实现,可惜set-car!
都没有绑定。
原版全书搜索:
find . -type f -iname "*.org" -exec grep --color -nH --null -e "set-car!" \{\} + |wc -l
27
第 3 4 章和第 5 章出现了 27 次,
在第 3 章中,我改变了 setcar!设置elisp的car。但是 elisp 不是第 4 章元语言抽象的好选择。
第 4 章有点困难,因此现在有冒险的风险。
我找到了好的解决方案set-car!, set-cdr! unbound in racket?
(require rnrs/mutable-pairs-6)
作为解决方案,如果将set-car!
set-cdr!
替换为set-mcar!
set-mcdr
,第4章和第5章的代码将运行顺利通过racket实现?
请记住,Racket 支持多种语言。在 #lang racket
中,对是不可变的,这意味着 set-car!
和 set-cdr!
不存在。
如果您想使用 #lang racket
,您可以使用框列表。一个框可以容纳一个值,您可以使用 set-box!
更改框所容纳的值。或者,您可以使用由 mcons
和 mlist
构建的可变对(和可变列表),但它可能会有点麻烦。
#lang r5rs
或 #lang sicp
中的对是可变的,这意味着您可以按原样使用 SICP 代码。
https://docs.racket-lang.org/sicp-manual/SICP_Language.html?q=sicp
如果您想知道为什么对在 #lang racket
中是不可变的,请参阅:
https://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html
我正在阅读SICP 4.1.3 Evaluator Data Structures
(define (make-frame variables values)
(cons variables values))
(define (frame-variables frame) (car frame))
(define (frame-values frame) (cdr frame))
(define (add-binding-to-frame! var val frame)
(set-car! frame (cons var (car frame)))
(set-cdr! frame (cons val (cdr frame))))
然而,set-car!
在球拍中被报告为无界。
然后试了'GNU Guile 2.2.6'、"GNU mit-scheme 10.1.10"的实现,可惜set-car!
都没有绑定。
原版全书搜索:
find . -type f -iname "*.org" -exec grep --color -nH --null -e "set-car!" \{\} + |wc -l
27
第 3 4 章和第 5 章出现了 27 次,
在第 3 章中,我改变了 setcar!设置elisp的car。但是 elisp 不是第 4 章元语言抽象的好选择。
第 4 章有点困难,因此现在有冒险的风险。
我找到了好的解决方案set-car!, set-cdr! unbound in racket?
(require rnrs/mutable-pairs-6)
作为解决方案,如果将set-car!
set-cdr!
替换为set-mcar!
set-mcdr
,第4章和第5章的代码将运行顺利通过racket实现?
请记住,Racket 支持多种语言。在 #lang racket
中,对是不可变的,这意味着 set-car!
和 set-cdr!
不存在。
如果您想使用 #lang racket
,您可以使用框列表。一个框可以容纳一个值,您可以使用 set-box!
更改框所容纳的值。或者,您可以使用由 mcons
和 mlist
构建的可变对(和可变列表),但它可能会有点麻烦。
#lang r5rs
或 #lang sicp
中的对是可变的,这意味着您可以按原样使用 SICP 代码。
https://docs.racket-lang.org/sicp-manual/SICP_Language.html?q=sicp
如果您想知道为什么对在 #lang racket
中是不可变的,请参阅:
https://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html