我希望能够操纵句子,以便我可以将它们作为输入并根据单个字母之类的内容返回输出。例如,一个ends -e命令将返回以" e":
结尾的所有单词(ends-e '(only the good die young))
=> '(the die)
不幸的是," e"是一个字符串,'(只有好死的年轻人)是一个句子。 Scheme无法理解句子作为数据类型(因为它不是一个)。如何将用户输入的句子和引号和括号转换为我可以操作并以相同的句子格式返回的内容?
这本书:https://people.eecs.berkeley.edu/~bh/ssch8/higher.html#ft1概述了一些可以操纵句子和单词的功能,但是在底部张贴了一个脚注"就像本书中处理单词和句子的所有程序一样...... [本章中的程序是我们对Scheme的扩展的一部分。"
如何获得这些扩展程序?我查看了后面的章节,但是我对语言的理解太过简陋,无法理解如何自己创建这些程序。
这些是我尝试将(#)转换为数据类型方案时可以理解的错误消息。
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 '())
>
这意味着如果'(h)等于" h"我就不能问方案。如果'(h)等于'(h),我甚至不能问它。
> (eq? '(h) "h")
#f
> (eq? '(h) '(h))
#f
>
答案 0 :(得分:1)
在DrRacket中有一个Simply Scheme compatibility language
打开包管理器:在DrRacket中选择菜单" File"然后选择"包管理器..."。
在标签中"做我的意思"找到文本字段并输入:" simple-scheme"没有引号。
点击"安装"按钮。这会产生smoe输出。当你点击"关闭输出"它已经完成,你可以关闭窗口。
测试一下。确保DrRacket具有"确定源语言和#34;在 左下角。编写以下程序并单击 RUN :
#lang simply-scheme
(se (butlast (bf "this"))
"world")
; ==> (hi "world")
我有点困惑,因为SICP和Simply Scheme是两本不同的书。 SICP在他们的书中有自己的指定程序,在DrRacket中有一种特定的语言,#lang sicp
,也就是这种方式的Scheme。我写了similar answer on how to install sicp。