Лисп поверх Питона
2020-10-01 14:15![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Питон нынче присутствует везде, даже на самых крохотных линуксных девайсах. Но если вы скучаете по функциональщине, вот вам простой Лисп поверх Питона. Называется Hy:
https://docs.hylang.org/en/stable/whyhy.html
Устанавливается командой:
https://docs.hylang.org/en/stable/whyhy.html
Устанавливается командой:
Вызывается как "hy". Такой себе вполне Лисп, с полным доступом к функциям и библиотекам Питона, и обратно. Поддерживает макросы, питоновские классы и модули. Можно делать автономные скрипты. Пример вычисления чисел Фибоначчи:pip3 install --user hy
Напечатает:(defn fib [n]
(if (< n 2)
n
(+ (fib (- n 1)) (fib (- n 2)))))
(print (fib 30))
832040
no subject
Date: 2020-10-01 22:39 (UTC)no subject
Date: 2020-10-02 00:01 (UTC)Позорище, конечно.
Я долго пялился на код, потом решил, что лениво переписывать на конечную рекурсию.
no subject
Date: 2020-10-02 00:18 (UTC)no subject
Date: 2020-10-02 06:19 (UTC)no subject
Date: 2020-10-02 06:49 (UTC)no subject
Date: 2020-10-02 06:59 (UTC)no subject
Date: 2020-10-02 07:09 (UTC)no subject
Date: 2020-10-02 07:08 (UTC)Исправил, спасибо.
no subject
Date: 2020-10-02 11:07 (UTC)no subject
Date: 2020-10-02 07:08 (UTC)Проблема с этим вариантом вычисления Фибоначчи, что даже сотый элемент не удаётся получить за разумное время.
Переписал на конечную рекурсию:
Теперь до 900-того вычисляет, а на 1000-ном падает с ошибкой "RecursionError: maximum recursion depth exceeded". Всё потому, что Питоновская виртуальная машина не поддерживает конечную рекурсию.
Переписал итеративным образом:
Теперь даже до миллионного элемента работает. Но всякий интерес пропадает: итеративный код проще будет на обыкновенном Питоне написать.
no subject
Date: 2020-10-04 18:14 (UTC)