首页 > 解决方案 > 为什么我的结果中会出现“列表”一词?

问题描述

对 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 作为语言。

标签: schemeracket

解决方案


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

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

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


推荐阅读