如何使用 DrRacket 遵循 Simply Scheme 书

How to follow the Simply Scheme book with DrRacket

我希望能够操纵句子,以便我可以将它们作为输入,并 return 基于诸如单个字母之类的东西作为输出。例如,一个 ends-e 命令会 return 所有以 "e":

结尾的单词
(ends-e '(only the good die young))
=> '(the die)

很遗憾,"e"是一个字符串,而'(only the good die young)是一个句子。 Scheme 很难将句子理解为一种数据类型(因为它不是一种)。如何将用户输入的带有引号和括号的句子转换为我可以操作的内容并且 return 具有相同的句子格式?

这本书:https://people.eecs.berkeley.edu/~bh/ssch8/higher.html#ft1概述了一些可以操纵句子和单词的函数,但在底部贴了一个脚注说"Like all the procedures in this book that deal with words and sentences... [the] procedures in this chapter are part of our extensions to Scheme."

如何获得这些扩展?我看了后面的章节,但我对这门语言的理解太初级,无法理解如何自己创建这些过程。

这些是我尝试将 '(h) 转换为可以理解的数据类型方案时收到的错误消息。

Welcome to DrRacket, version 6.12 [3m].
Language: sicp, with debugging; memory limit: 128 MB.

> (symbol->string '(h))
. . symbol->string: contract violation
  expected: symbol?
  given: (mcons 'h '())
> (list->string '(h))
. . list->string: contract violation
  expected: (listof char?)
  given: '(h)
> (string->list '(h))
. . string->list: contract violation
  expected: string?
  given: (mcons 'h '())
> (string->symbol '(h))
. . string->symbol: contract violation
  expected: string?
  given: (mcons 'h '())
> 

这意味着我不能询问 scheme 是否 '(h) 等于 "h"。我什至不能问它 '(h) 是否等于 '(h)!

> (eq? '(h) "h")
#f
> (eq? '(h) '(h))
#f
> 

在 DrRacket 中有一个 Simply Scheme compatibility language

1。来自包管理器

  1. 打开包管理器:在 DrRacket 中选择菜单“文件”,然后选择“包管理器...”。

  2. 在“Do What I Mean”选项卡中找到文本字段并输入:“simply-scheme”(不带引号)。

  3. 单击“安装”按钮。这会产生 smoe 输出。当您可以单击“关闭输出”时,它就完成了,您可以关闭 window.

  4. 测试一下。确保 DrRacket 中有“从源代码中确定语言” 左下角。编写如下程序,点击运行:

#lang simply-scheme
(se (butlast (bf "this"))
    "world")
; ==> (hi "world")

自从 SICP and Simply Scheme are two different books. SICP has their own specified procedures from their book and in DrRacket there is a specific language, #lang sicp, for that flavor of Scheme too. I've written a similar answer on how to install sicp 以来我有点困惑。