Если вы получаете удовольствие от программирования, то, наверняка, перманентно находитесь в состоянии поиска лучших инструментов, лучших идей, лучших решений. И знаете, конечной остановкой лично для меня стал Emacs. А точнее — его сборка под названием ErgoEmacs. Под катом будет попытка логического и последовательного рассказа об использовании данного текстового редактора в контексте знакомства с ним впервые в жизни (не вдаваясь в сильную конкретику, а скорее стараясь уловить общую идею); идеологическая пропаганда (емакса вообще и лиспа в частности); небольшая критика последней из статей на Хабре по данной тематике, а также небольшое философское заключение. Если вы хотите расширить свой кругозор, прошу под кат.
Читать полностью »
Рубрика «Лисп» - 2
ErgoEmacs — a way to Lisp
2015-01-27 в 10:52, admin, рубрики: emacs, ErgoEmacs, емакс, Лисп, ПрограммированиеЛисп из Питона
2014-01-13 в 14:33, admin, рубрики: Лисп, ненормальное программирование, Питон, метки: Лисп, ПитонСчитается, что Питон — не очень пластичный язык. В нем нет макросов ни в одном из значений слова «макрос», нет красивых строковых миксинов, как в D, нельзя вводить свои операторы. Расширять язык можно только с помощью новых функций и классов. Фактически, программист на Питоне привязан к определенному синтаксису и, как следствие, определенному стилю решения проблем. «One way to do it». Таким образом, Питон располагает к написанию простого читаемого кода, что, естественно, очень даже хорошо. Но скучно.
К счастью, проявив некоторую фантазию, питоновский синтаксис тоже можно поломать. Например, можно сделать из Питона Лисп. Следующий пример — валидный питоновский код, который запускается интерпретатором без всякой дополнительной обработки и предсказуемо выводит в консоль "[24, 42]".
from fakelisp import *
# And now you can write Lisp
(BEGIN
(SET (F) (LAMBDA (X)
(IF (EQ (X) (1))
(1)
(MUL (X) (F (SUB (X) (1)))))))
(SET (X) (QUOTE (F (4)) (42))))
# Back to Python any time
print "x: ", X
Не пишем quicksort на Common Lisp
2013-08-15 в 11:11, admin, рубрики: Алгоритмы, ликбез, Лисп, метки: ликбез, ЛиспПотому что незачем. Во-первых, все уже написано и не раз. Во-вторых, штатный sort в общем случае работает не хуже. В-третьих, в моду входят задачки, требующие не столько умения пользоваться сортировкой, сколько обходиться вообще без нее. Взять, к примеру, вот эту с собеседования в Microsoft.
1. Анаграммы
Имеется массив человеческих слов. Некоторые слова могут являться анаграммами по отношению друг у другу. Надо найти количество таких слов, причем сложность алгоритма должна быть линейной.
Очевидное решение — отсортировать сами слова, потом отсортировать массив, пройтись по нему и посчитать количество слов с самоподобными соседями.
На CL это можно написать так:
(defvar *words* (list "thore" "ganamar" "notanagram" "anagram" "other"))
((lambda (words)
(loop for (a b c) in
(mapcar #'list words (append '("") words) (append '("" "") words))
count (or (equal a b) (equal b c))))
(sort (mapcar (lambda (one-word) (sort one-word #'char-lessp)) *words*) #'string-lessp))
Прошло ровно два года с момента публикации на Хабре статьи про HomeLisp. Та статья, которую запостил мой сын, вызвала довольно бурное обсуждение и яростные нападки определенной части аудитории.
Что же произошло за эти два года с проектом?
Спешу «обрадовать» недоброжелателей: проект не заброшен и потихоньку развивается. 09.02.2012 разработчик выложил на сайт homelisp.ru последнюю версию пакета 1.13.4. Далее будет рассказано, чем она отличается от предыдущей (той, которуюе «клевали» два года назад).Самое важное отличие — переменные стали лексическими (представьте, разработчик знает, что такое лексическая переменная, замыкание,Читать полностью »
