通过在Scheme中重复列表的元素来组成列表

时间:2018-10-17 11:03:13

标签: scheme racket

我知道

                  (define (repe k n) (make-list k n))

组成一个列表,其中 n 出现 k 次,但是...如何构造一个类似的句子,其中 k 是第一个元素和 n 上一个列表的第二个?

我的

             (define (repe x) (make-list car(x) cdr(x)) list)

似乎不起作用。

另一方面,我希望列表 n 的第二个元素不是数字,而是字母。怎么做(因为 make-list 似乎只是为数字定义的)?

1 个答案:

答案 0 :(得分:1)

函数的应用方式如下:(car x)(cdr x),而不是car(x)cdr(x)

(cdr x)是一个列表-第二个元素是(car (cdr x)),或简称为(cadr x)

您的描述不完全清楚,但似乎您正在寻找

(define (repe xs) (make-list (car xs) (cadr xs)))

示例:

> (repe (list 4 #\Z))
'(#\Z #\Z #\Z #\Z)
> (repe (list 3 "hello"))
'("hello" "hello" "hello")
> (repe '(2 (+ 1 1)))
'((+ 1 1) (+ 1 1))