使用Racket递归附加两个函数?

使用Racket递归附加两个函数?,racket,Racket,我使用的是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)

我使用的是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 '() '()

您的问题似乎是,
append
并没有达到您期望的效果-它会打开并丢弃顶级空列表。(例如,
(附加“(1)”()”(2)”()(3));;=>”(1233)

因此,替换为
append
将产生(我认为是)预期的输出

(define (my-list n empty-list)    
   (if (= n 0) 
      empty-list    
      (cons 
        empty-list 
        (my-list (- n 1) empty-list))))

(my-list 2 '()) ;; => '(() ())
你也应该重新考虑一下击打球拍的内置功能


append
在内部执行的操作以及在这种情况下为什么不希望执行该操作进行了有用的细分。

我知道这有点晚了,但感谢您回答这个问题。你的意见帮助我解决了这个问题。你刚才提到的效果不错。