用Racket递归附加两个函数?

时间:2017-11-12 00:53:55

标签: 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) e    
      (append e(list (- n 1) e)) ))

; (list 0 '())   
; prints '()   
; (list 2 '())
; should print '() '()

1 个答案:

答案 0 :(得分:1)

你的问题似乎是while没有做你期望的事情 - 它会解开并丢弃顶级空列表。 (例如while_stmt ::= "while" expression ":" suite ["else" ":" suite] )。

因此,将cons换成append会导致(我相信)预期的输出。

(append '(1) '() '(2) '() '(3)) ;; => '(1 2 3)

您还应该重新考虑使用Racket的内置list功能。

This answerappend内部正在做什么以及为什么在这种情况下不合需要有一个有用的细分。