3
Цель: реализация unfold
функция, использующая только два аргумента.функция разворачивания в схеме
Аргументы:
- первый аргумент F, которая принимает начальное значение некоторого типа I и возвращает NIL или минусы пары двух элементов (первый из этих двух является следующим элементом, который снова входит в список некоторого типа A и следующего начального значения некоторого типа I).
- Второй аргумент является начальным значением некоторого типа I и возвращение список элементов типа А.
Это то, что я до сих пор, и я не знаю, почему он не работает:
(define (descending i)
(if (= i 0)
(list)
(cons i (- i 1))))
(define nil (list))
(define (unfold f init)
(if (eq? (f init) '())
(list)
(cons init (unfold f (f init)))))
(unfold (descending 5))
должен вычисляться
'(5 4 3 2 1)
Это должно быть результатом, но это не так. Что я делаю не так?
Я вижу! Благодаря! Также, если я хочу определить восходящую функцию, которая возвращает '(-100 ... 100), я не знаю, почему следующий код останавливается на -5: (define (возрастающий i) (if (= i (- i)) (список) (cons i (+ i 5)))) (развернуть по возрастанию (- 100)) –
В вашем состоянии есть '(= i (- i))', что эквивалентно '(= i 0) ', поэтому он останавливается на 0, а последний, который нужно просить, равен' -5'. –
Думаю, мне просто нужно (= i (105)) тогда. Я просто подумал, что могу определить функцию таким образом, чтобы она печатала все число до включения, включая отрицательный результат. –