代码之家  ›  专栏  ›  技术社区  ›  Asher

如何使用DrRacket遵循简单方案手册

  •  1
  • Asher  · 技术社区  · 7 年前

    我希望能够操纵句子,以便将它们作为输入,并根据单个字母等返回输出。例如,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的扩展。”

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

    这些是我在尝试将“(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
    > 
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Community CDub    5 年前

    在DrRacket中有一个 Simply Scheme compatibility language

    1、来自Package Manager

    1. 打开软件包管理器:在DrRacket中选择菜单“File”,然后选择“Package Manager…”。

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

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

    4. 测试它。确保DrRacket在 左下角。编写以下程序并单击 :

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

    我有点困惑 SICP Simply Scheme 是两个 不同的书籍 .SICP在其手册中有自己的指定程序,在DrRacket中有一种特定的语言, #lang sicp ,这也是计划的味道。我写了一个 similar answer on how to install sicp

    推荐文章