& # 8220; разворачиваться & # 8221; для общего липа?
-
06-07-2019 - |
Вопрос
Я узнал довольно много схем из SICP, но теперь меня больше интересует общий шпион. Я знаю, что fold
для lisp - это redu
со специальными аргументами для сворачивания влево или вправо, но что эквивалентно развернуть
? Поиск в Google не сильно помог. На самом деле у меня сложилось впечатление, что нет разворачиваться ???
Решение
Common Lisp имеет (loop ... collect ...)
. Сравнить
(loop for x from 1 to 10 collect (* x x))
с его эквивалентностью с использованием развернуть
:
(unfold (lambda (x) (> x 10)) (lambda (x) (* x x)) (lambda (x) (+ x 1)) 1)
В общем, (развернуть p f g seed)
в основном
(loop for x = seed then (g x) until (p x) collect (f x))
Изменить: исправить опечатку
Другие советы
Общая гиперспекция lisp не определяет функцию развернуть
, но вы, безусловно, можете написать свою собственную. Его определение схемы переводит почти символ для символа.
Не связан с StackOverflow