为什么 "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中有datum
和datum syntax
的概念。
数据是对象的数学部分。例如,数字 3
或对 (x y)
是一个 数据 。 数据语法 是一种表示数据的方法。例如,#x03
或 3
或 #b11
是表示数据 3
的数据语法。同样,数据 (x y)
可以用语法表示为 (x y)
或 (x . (y . ()))
.
方案输出有很多打印数据的选项。一些输出函数打印数据,这样它们打印的内容就是创建给定数据的有效代码,或者它们可以将数据打印为有效语法作为将创建该数据的数据。
刚接触 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中有datum
和datum syntax
的概念。
数据是对象的数学部分。例如,数字 3
或对 (x y)
是一个 数据 。 数据语法 是一种表示数据的方法。例如,#x03
或 3
或 #b11
是表示数据 3
的数据语法。同样,数据 (x y)
可以用语法表示为 (x y)
或 (x . (y . ()))
.
方案输出有很多打印数据的选项。一些输出函数打印数据,这样它们打印的内容就是创建给定数据的有效代码,或者它们可以将数据打印为有效语法作为将创建该数据的数据。