我正在使用racket语言,但是我在获取递归函数的某些预期结果时遇到了一些麻烦。我的目标是输入一个整数n并输出该元素n次,作为列表。
'排除'和文字,#lang racket
; take n (integer) e (scheme) build new list
; 2 `() -> () ()
; 3 `a -> a a a
; 4 `(a) -> (a) (a) (a) (a)
(define (list n e)
(if (= n 0) e
(append e(list (- n 1) e)) ))
; (list 0 '())
; prints '()
; (list 2 '())
; should print '() '()
答案 0 :(得分:1)
你的问题似乎是while
没有做你期望的事情 - 它会解开并丢弃顶级空列表。 (例如while_stmt ::= "while" expression ":" suite
["else" ":" suite]
)。
因此,将cons
换成append
会导致(我相信)预期的输出。
(append '(1) '() '(2) '() '(3)) ;; => '(1 2 3)
您还应该重新考虑使用Racket的内置list
功能。
This answer对append
内部正在做什么以及为什么在这种情况下不合需要有一个有用的细分。