Racket 为什么我的函数返回的列表结果看起来很有趣?

Racket 为什么我的函数返回的列表结果看起来很有趣?,racket,interpreter,read-eval-print-loop,racket-student-languages,repl-printed-representation,Racket,Interpreter,Read Eval Print Loop,Racket Student Languages,Repl Printed Representation,我正在使用这段代码,但它没有按照我想要的方式创建列表(evenList(list 1 2 3 4))在REPL中的计算结果为(cons 2(cons 4’()),但我希望它类似于(list 2 4)您的代码可以正常工作,并尽我所能给出正确的输出。我猜你使用的是刚开始的学生语言。当使用初级学生语言时,REPL中的列表(2 4)表示为(cons 2(cons 4’());当使用中级学生语言时,该列表在REPL中表示为(列表2 4)。在#lang racket中,您会看到REPL中的'(2 4)表示了

我正在使用这段代码,但它没有按照我想要的方式创建列表<代码>(evenList(list 1 2 3 4))在REPL中的计算结果为
(cons 2(cons 4’())
,但我希望它类似于
(list 2 4)

您的代码可以正常工作,并尽我所能给出正确的输出。我猜你使用的是刚开始的学生语言。当使用初级学生语言时,REPL中的列表
(2 4)
表示为
(cons 2(cons 4’())
;当使用中级学生语言时,该列表在REPL中表示为
(列表2 4)
。在
#lang racket
中,您会看到REPL中的
'(2 4)
表示了这一点。在所有情况下,基础列表数据结构都是相同的;这只是列表的打印表示形式。

“但它没有按照我想要的方式创建列表”没有多大帮助。目前的结果是什么?预期/要求的结果是什么?(evenList(列表1 2 3 4))上述代码中此函数的答案(cons 2(cons 4’())但我希望它是这样的(列表2 4)谢谢你,mate解决了我的问题problem@DarKing--我对你的问题进行了编辑,以澄清问题,使未来的访问者更容易找到问题;我希望这是好的。我也把我之前的评论移到了一个答案中。我们真的应该为Racket中的“打印格式”做一些特定的标记。这些问题总是很复杂,有标签会有助于找到类似的问题。@WillNess--这是个好主意。我在回答之前找了个傻瓜,什么也找不到;一个标签会很有帮助。由于打印表示法在lisps中非常重要,所以我可以提名。乍一看,我现在看不到类似的东西。我想这是个好主意。sure也会被其他语言所接受,具有丰富的数据表面语法,比如(我听说;))Clojure。你应该继续在这个问题上添加这个标签。如果出于某种原因你不被允许,ping我,我会做的,我以前也做过(例如)。但是既然你已经想出了这个办法,你就应该有自己动手的荣誉更具体地说,我们把它改名为“repl printed representation”怎么样?到目前为止,我只发现并标记了几个问题,不必费心去重新标记它们。另一种选择是始终将它们标记为“repl”,但5个标记的限制有时不允许这样做。你怎么认为?“打印表示法”似乎过于宽泛,还可能包括序列化问题,或者被误认为是序列化问题而被删除。(!)@WillNess——我不一定反对,但我不认为印刷的陈述只是为了REPL。Lisp读取器读取打印的表达,例如,可以从文件中读取它们。我不确定说得更具体是否有好处,但REPL也可能是提问者出现大多数问题的地方。我也没有太强烈的感觉。。。。
(define (evenList xs)
    (cond
        ((null? xs) '())   
        ((eq? (cdr xs) '()) '()) 
        (else (cons (cadr xs) (evenList (cddr xs))))))