Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет o01eg ([info]o01eg)
@ 2009-08-07 03:42:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:coding, gp, lisp

Genetic Functional Programming
Мой интерпретатор моего варианта лиспа:
http://bin.mypage.sk/FILES/gp-0.0.1.tar.bz2
В качестве примера там имеются две функции, считающие длину списка с обычной и хвостовой рекурсией.
Выглядит этот лисп довольно жестоко, ибо не предназначен для человеческих глаз, кроме того пока имееются довольно скудный список встроеных функций:
#0 - EVAL
#1 - CONS
#2 - CAR
#3 - CDR
#4 - NULL
#5 - +
Есть различия от clisp в поведении функций, (CAR NIL) и (CDR NIL) дают ERROR, а не NIL.
Для передачи имени функции в качестве параметра её надо блокировать от вычислений "( ' #4 )", иначе интерпретатор подумает, что она вычисляется, и испортит стеки.
При записи каждый элемент должен отделяться пробельным символом (ибо делать нормальный парсер было лень).



(Добавить комментарий)


[info]ketmar
2009-08-07 16:27 (ссылка)
>Есть различия от clisp в поведении функций, (CAR NIL) и (CDR NIL) дают ERROR, а не
>NIL.

что, кстати, совершенно верно. потому что атом nil не является списком, и списковые операции над ним не определены.

но без пуризма проще. %-)

я так понимаю, tail recursion стек не жрёт, как психованная?

(Ответить) (Ветвь дискуссии)


[info]o01eg
2009-08-08 03:09 (ссылка)
Ага, окружение для ADF не сохраняется в стеке, а просто переписывается.

(Ответить) (Уровень выше)