我在加载伯克利计划课程Simply Scheme的代码时遇到了问题,特别是this代码。我已在许多不同版本的Scheme中对其进行了测试。在Chicken中,我收到此错误:
#;1> (load "simply.scm")
; loading simply.scm ...
Error: (symbol->string) bad argument type - not a symbol: #<procedure (? wd)>
Call history:
<syntax> (##core#if (empty? x) (##core#begin (whoops "Invalid argument to FIRST: " x)) (##core#if (word? x) (......
<syntax> (empty? x)
<syntax> (##core#begin (whoops "Invalid argument to FIRST: " x))
<syntax> (whoops "Invalid argument to FIRST: " x)
<syntax> (##core#if (word? x) (##core#begin (word-first x)) (##core#begin (whoops "Invalid argument to FIRST:...
<syntax> (word? x)
<syntax> (##core#begin (word-first x))
<syntax> (word-first x)
<syntax> (##core#begin (whoops "Invalid argument to FIRST: " x))
<syntax> (whoops "Invalid argument to FIRST: " x)
<syntax> (##core#undefined)
<syntax> (word->string word->string)
<eval> (word->string word->string)
<eval> (string? wd)
<eval> (number? wd)
<eval> (symbol->string wd) <--
为了比较,Racket给出了这个错误:
Welcome to Racket v6.3.
> (load "simply.scm")
simply.scm:20:12: set!: cannot mutate module-required identifier
in: number->string
context...:
/home/hercynian/racket/collects/racket/private/misc.rkt:87:7
。 。 。这似乎并不是一回事。这超出了我的初学者技能水平。任何想法只是简单的.scm?
答案 0 :(得分:2)
似乎可以使用:
球拍不会这样做,但是你必须非常严重地修改这个文件(至少更改一下!定义并可能将它全部包装在模块中? - 但我不是球拍的人)
这就是我要做的事情:
再次下载这个simple.scm文件,只是为了确定(你的鸡错误暗示某处你错过了“让”,可能在第264行( word 的定义)或310 (第一个的定义)?),
尝试上述方案实施,如果您收到任何错误,请将其粘贴到此处,
如果您没有这些版本(这可能很奇怪,但我不知道您的情况),并且正在自行完成课程,请尝试不使用简单的.scm,并且任何时候你发现你的方案中缺少某些东西,试着只从simple.scm复制那个定义(或者修改你的代码以便不需要它) - 这是硬核方式。
答案 1 :(得分:0)
我从错误中看到您正在使用DrRacket IDE或球拍二进制文件。
Racketeer和SO-er Danny Yoo制作了一个Racket模块语言,以支持球拍语言套件中的Simply Scheme。在Racket中,左下角的下拉菜单设置为&#34;确定来自源的语言&#34;并将定义窗口(包括#lang
行)替换为以下内容:
#lang planet dyoo/simply-scheme:2
(se (butlast (bf "this"))
"world")
然后按 RUN 。它将下载并安装该语言,然后您将看到答案(hi "world")
。第一次你可能会看到一个错误,但我的经验是,它会在连续运行时消失。
定义将具有the documentation中描述的所有简单方案特征。快乐的黑客!