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

问题描述

(define (evenList xs)
    (cond
        ((null? xs) '())   
        ((eq? (cdr xs) '()) '()) 
        (else (cons (cadr xs) (evenList (cddr xs))))))

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

解决方法

据我所知,您的代码可以正常工作并提供正确的输出。我猜您正在使用初级学生语言。当使用初学者语言时,列表 (2 4) 在 REPL 中表示为(cons 2 (cons 4 '()));当使用中级学生语言时,这个相同的列表在 REPL 中表示为 (list 2 4)。在 #lang racket 中,您会看到它在 REPL 中表示为 '(2 4)。在所有情况下,底层列表数据结构都是相同的;这只是列表的打印表示的问题。