Racket不允许使用列表和对

时间:2014-04-22 15:32:42

标签: scheme racket

我已经下载了Racket并遵循其手册,之前我使用过Plt Scheme,而且作者说的是相同的;我发现了一些不太直接的东西

当我发出指示时

(列表"红色""绿色""蓝色")

并执行程序,它出现:

(列表"红色""绿色""蓝色")

而不是'("红色""绿色""蓝色");过去常见于Scheme。我尝试过所有语言(初级,中级,高级),什么都没有;那是为什么?

此外,如果我想使用像:

的利弊

(缺点1 2)

我得到的错误是:

缺点:第二个参数必须是一个列表,但是收到1和2

那为什么呢?在方案中,通常表达式打印'(1 2)

任何帮助?

3 个答案:

答案 0 :(得分:2)

您似乎正在使用其中一种教学语言。试试这个:在窗口的左下角,选择"从源中确定语言"并在编辑器中将其写为第一行:

#lang racket

小心但是,Racket和Scheme是不同的语言,并且有一些不同之处w.r.t。标准方案。当您尝试变异cons单元格时,会出现最初的惊喜之一,请参阅此question获取建议。另请注意,在Racket if表达式必须同时具有结果和替代。请务必查看此answer以了解更多差异。

答案 1 :(得分:2)

首先,DrRacket支持大量语言,因此您可能无法选择正确的语言,或者您选择的语言的默认设置并不令人满意。我会考虑如何改变语言以及如何改变它的外观:

选择要编程的语言

正如您所提到的,DrRacket IDE左下角有一个下拉菜单,您可以在其中进行选择。按此按钮选择之前已选择的语言之一或使用"选择语言"选择其他东西的选项。

另一个非常方便的选择是选择"从源中确定语言"并把其中一个作为第一行:

#!r6rs    ; Scheme standard R6RS language
#!r5rs    ; Scheme standard R5RS language (legacy)
#!racket  ; Racket's own Scheme dialect != Scheme (racket can mean "A dirty scheme")

因此DrRacket就像一个支持大量编程语言的IDE,但它们主要是Scheme方言。在它被称为Racket之前,它被称为DrScheme,该语言被称为PLT Scheme,#lang scheme作为默认语言。 #!scheme已被弃用,可以删除,以便为将来版本的球拍制作兼容的程序选择其他内容。

在按Run之前,实际的更改不会发生。您将在交互窗口中看到新语言生效。

更改REPL显示计算表达式的方式

当您按 RUN 时,交互窗口中打印的内容(如在REPL中)或交互窗口中的表达式不会输出,因此标准不涵盖这些内容。

您可以选择REPL如何显示来自同一左下方选择菜单的结果。选择"选择语言"没有做出任何选择,然后按左下角"显示详细信息"。您有3种不同的方式来展示它。以下是不同的选项:

Input expression    Constructor      Quasiquote      write
(cons 1 2)          (cons 1 2)      `(1 . 2)         (1 . 2)
(list 1 2)          (list 1 2)      `(1 2)           (1 2)
add1                add1            add1             #<procedure:add1>

请务必了解这只是REPL中的表示,并且实际上在您的程序中打印了一些需要display或类似的打印过程以实际获得真实输出的内容。

答案 2 :(得分:0)

好的,我找到了一个很好的方法,在程序的开头我应该:

#lang scheme

然后根据@OscarLopez

的建议从源头确定语言

现在至少我可以在Racket中使用Scheme