为什么 "list" 这个词出现在我的结果中?

Why is the word "list" showing up in my results?

刚接触 Scheme,很抱歉问了一个基本问题。每当我打印出一些东西作为测试时,我的结果总是在打印的列表中包含单词“list”。

我的代码:

(define get-lower-half
  (lambda (lst n)
    (if (< n (quotient (length lst) 2))
      (cons (list-ref lst n) (get-lower-half lst (+ n 1)))
      '())))
(get-lower-half '(1 2 3 4 5) 0)

我的结果是:

(list 1 2)

而不仅仅是

(1 2)

我在网上找的使用cons的例子都没有这个问题,我到底哪里做错了?我使用 DrRacket 作为我的 IDE 中级学生,使用 Lambda 作为语言。

我很确定您期待 '(1 2)(列表),而不是 (1 2)

(1 2) 不是 Racket 或中间语言中的有效过程。

在中间语言中,列表用列表过程表示,(list 1 2) 而不是像常规 Racket 中的 '(1 2)。您看到的是常规的中间语言行为。

Scheme中有datumdatum syntax的概念。

数据是对象的数学部分。例如,数字 3 或对 (x y) 是一个 数据 数据语法 是一种表示数据的方法。例如,#x033#b11 是表示数据 3 的数据语法。同样,数据 (x y) 可以用语法表示为 (x y)(x . (y . ())).

方案输出有很多打印数据的选项。一些输出函数打印数据,这样它们打印的内容就是创建给定数据的有效代码,或者它们可以将数据打印为有效语法作为将创建该数据的数据。

参见 io-ports and datum 定义。