Составьте список, повторяя элементы списка в схеме - PullRequest
0 голосов
/ 17 октября 2018

Я знаю, что

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

составляет список, где n появляется k раз, но ... Как я могу построить подобное предложение, для которого k является первым элементом, а n вторым из предыдущего списка?

My

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

не работает.

С другой стороны, я хочу, чтобы второй элемент списка n был не цифрой, а буквой.Как это можно сделать (поскольку make-list , кажется, определен только для чисел)?

1 Ответ

0 голосов
/ 17 октября 2018

Функции применяются следующим образом: (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))
...