Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Posts Tagged ‘lisp

Пітер Норвіг подарував мені Схему :)

with 2 comments

Для тих хто не знає, Пітер Норвіг це не Миколай, а director of research (керівник дослідженнями) в Google. А також автор грубезної книжки зі штучного інтелекту, і класичної статті Як вивчити програмування за 10 років?.

Але якось випадково блукаючи інтернетом я набрів на статтю: (How to Write a (Lisp) Interpreter (in Python))

Я прочитав, мене поперло, взяв код, перевірив, додав ще функцій, сподобалось ще більше, відкрив SICP, а там:

(define (square x) (* x x))

А в Норвіга define обчислюється так:

elif x[0] == 'define':         # (define var exp)
        (_, var, exp) = x
        env[var] = eval(exp, env)

І якщо var – список, то воно як ключ в env не лізе. Вирішив замінювати

(define (square x) (* x x))

на

(define square (lambda (x) (* x x)))

І переписав так:

        elif x[0] == 'define':         # (define var exp)
            (_, var, exp) = x
            if isa(var, str):
                env[var] = eval(exp, env)
            elif isa(var, list):
                env[var[0]] = eval(['lambda', var[1:], exp])
            else:
                RuntimeError('Cannot assign to constant!')

А потім ще додав до стандартних функцій print, input, а потім getattr, та import, за допомогою яких можна доступитись до всієї стандартної бібліотеки Python.

Потім я за допомогою функцій (ага!) і рекурсії описав цикли while та for і намалював дві пентаграми черепахою:

Але писати цикли функціями коли це повинні бути спеціальні форми (як і cond, та напевне define) – це трохи збоченння. Я почав гуглити про то як реалізовують макроси, і о яке щастя, я знайшов ще другу частину: (An ((Even Better) Lisp) Interpreter (in Python))

А потім може я на цій реалізації пройду SICP і напишу компілятор в байт-код Python. І зроблю про це презентацію до наступного performance appraisal…

Written by bunyk

Грудень 18, 2013 at 01:37

Оприлюднено в Кодерство

Tagged with , ,

Хакери дужкастих і не дуже мов

with 5 comments

Так, от, я дочитав “Coders at work” майже до кінця. Залишився тільки Кнут, і ще один. Книжка яких мало. Програміст бере інтерв’ю в програмістів (при чому відомих: два з них писали нетскейп, один з яких придумав JavaScript, ще один Erlang, ще один Хаскель, ще один регулярні вирази, ще один мову Smalltalk, і ще один Unix. А ще одна – жінка з премією Тюрінга).

Інтерв’ю бере журналіст, який якось раптом вирішив познайомитись з програмуванням, і так захопився що навіть написав книжку “Practical Common Lisp”. Відповідно він задає запитання, які нормальний журналіст би не здогадався задати, типу:

Як вам “грамотне програмування” Кнута?
За якими критеріями ви вирішуєте чи брати на роботу людину після співбесіди?
Що вам подобається в програмуванні, чому ви обрали свою галузь, і як ви того навчились?
Ви для зневадження використовуєте print чи інтерактивний зневадник?
Ви проектуєте зверху вниз, чи знизу вверх?
Вам подобається система коли код має власника, чи коли кожен може змінювати код всіх інших?
Ви пробували формальні методи? Контрактне програмування? Автоматичне доведення коректності?

І розглядаються важливі проблеми, як от, чому закон Мура не працює в програмному забезпеченні, чому університети відірвані від потреб індустрії (бачте, на заході ті ж проблеми), чим відрізняється програмування й мислення молодих і старих програмістів.

Так от там є кілька речей які мені особливо запам’ятались.

Прочитати решту цього запису »

Written by bunyk

Січень 3, 2012 at 01:53

Оприлюднено в Кодерство, Психософія

Tagged with , , ,

Пошук гамільтонового циклу на CLISP

with 43 comments

Лабораторна яку я ще не здав. Бо Володимира Юрійовича і без мене було кому діставати. Але сидів до першої ночі, а потім від шостої ранку до першої пари. Потім дві години ходив за Володимиром Юрійовичем. 🙂 Безрезультатно. Щоденник закінчую, далі обгрунтування актуальності:

Лісп, бо він простий і елегантний, на відміну від Пролога. Ну, і звісно Лісп може бути імперативним, тобто іти на компроміс з вашими звичками. Пролог такого не допустить, або я ще не вияснив як.

І що найголовніше Лісп, хоча це й мова на якій Бог написав всесвіт, достатньо проста. Принаймі простіша за C++. І дуже дуже приємна. Натикаєшся наприклад на функцію (dolist (x list)..., і думаєш, хей, це ж як for x in list: .... А (make-array (list FIELD_SIZE FIELD_SIZE) :initial-element 0) – це майже MatLab. Про lambda, map, reduce, eval я взагалі мовчу.

Крім того, синтаксис простіший ніж в XML.

Найбільша проблема в вивченні Lisp – це визначити що вчити – його, чи Scheme. Схему я ще не копав достатньо глибоко, щоб розповідати про відмінності. Знаю лише що до плюсів Scheme входить SICP. А ще функції описуються за допомогою (define, а не (defun, і в цьому напевне є якась змістовна відмінність.

А до плюсів Common Lisp я сміливо відношу те, що з ним можна познайомитись за кілька годин, дуже весело, і без шкоди для здоров’я. Тут.

Ах, ну і власне, лабораторна: Прочитати решту цього запису »

Written by bunyk

Травень 31, 2011 at 15:06

Оприлюднено в Кодерство, Конспекти

Tagged with