Вопрос

Я узнал довольно много схем из 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 не определяет функцию развернуть , но вы, безусловно, можете написать свою собственную. Его определение схемы переводит почти символ для символа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top