我正在尝试在 Racket 中实现一些 SICP 图形程序,但有两个问题:
当我需要使用“让”时,我不能使用初学者语言。当我尝试更改语言或使用“高级”语言打开新文件时,出现此错误:
module: identifier already imported from a different source
当我尝试加载图像模块时出错(需要 2htdp/图像)。
这是怎么回事?另外,有没有更好的方法来训练 Scheme 中的图像?
目前尚不清楚为什么要首先使用2htdp/image
。一个更有用的包是 Neil Van Dyke 的SICP 支持页面,它提供了一种支持本书的语言并包括图形语言。这应该足以解决您的两个问题。
正如Óscar所提到的,你最好使用#lang planet neil/sicp
,但是,如果你想导入一些导出相同符号的东西,你可以给它们加前缀:
(require (prefix-in hi: 2htdp/image))
然后所有从那里导出的都带有前缀 hi:,例如。(hi:circle 30 "outline" "red")
. 冒号没有什么特别的。前缀本来可以xxx
是xxxcircle
.
此外,您只能导入所需的符号:
; you only want circle and eclipse
(require (only-in 2htdp/image circle ellipse))
或者您可以导入除某些符号之外的所有内容:
; everything except circle and ellipse
(require (except-in 2htdp/image circle))
当你知道这一点时,没有理由不使用racket
或racket/base
作为语言。