无法加载Simply Scheme代码

时间:2016-07-03 14:07:02

标签: scheme

我在加载伯克利计划课程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?

2 个答案:

答案 0 :(得分:2)

似乎可以使用:

  • guile(2.0.11),
  • 鸡的解释者(4.10.0),
  • gambit的翻译gsi(4.2.8),
  • mit-scheme(9.1.1)

球拍不会这样做,但是你必须非常严重地修改这个文件(至少更改一下!定义并可能将它全部包装在模块中? - 但我不是球拍的人)

这就是我要做的事情:

  1. 再次下载这个simple.scm文件,只是为了确定(你的鸡错误暗示某处你错过了“让”,可能在第264行( word 的定义)或310 (第一个的定义)?),

  2. 尝试上述方案实施,如果您收到任何错误,请将其粘贴到此处,

  3. 如果您没有这些版本(这可能很奇怪,但我不知道您的情况),并且正在自行完成课程,请尝试不使用简单的.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中描述的所有简单方案特征。快乐的黑客!