Cellar Door

29 июня 2005

Два трюка с Lisp/Scheme

1) (format nil "~r" 9876543212345678987654321)
"nine septillion eight hundred seventy-six sextillion five hundred forty-three quintillion two hundred twelve quadrillion three hundred forty-five trillion six hundred seventy-eight billion nine hundred eighty-seven million six hundred fifty-four thousand three hundred twenty-one"
No comments...
2) Вот кусочек кода для guile:
(define (factorial n)
(let loop ((total 1)
(n n))
(cond ((= n 0) total)
(else (loop (* n total) (- n 1))))))
Можно смело ввести такое:
(factorial 10000)
Результат не привожу :)) Но он есть, правда последние n чисел нули, не уверен что так должно быть, во всяком случае не проверял корректность такого ответа. Но всё равно забавно.
Common Lisp тоже весьма способен в решении данной задачи, но 10000 для него уже перебор :)

28 июня 2005

О языке Lisp. Часть 2

Лучшей книгой для начала изучения Lisp по-моему более чем заслуженно считают Practical Common Lisp, есть еще такая инструкция, книги Common Lisp the Language и Successful Lisp. Вот еще пара ссылок: The Common Lisp Cookbook, страницы Peter Norvig и Paul Graham. Дополнительные ресурсы здесь, да и на тех страницах Wikipedia наверняка еще есть что-то любопытное. Осталось упомянуть портал cons.org, dmoz.org и два Вики - ALU Wiki и CLiki.
Пока всё. Удачи!
---------------------
А подтолкнули меня к знакомству с данным языком его упоминания в статьях Андрея Зубинского, за это и то влияние, что он оказал на формирование моих интересов и способностей, ему низкий поклон.

О языке Lisp. Часть 1

Пару дней назад началось мое знакомство с языком функционального программирования Lisp, вернее Common Lisp, и это отличный опыт. "The programmable programming language", язык о котором пишут "the best programming language ever". Говорят, "люди его или фанатично любят, или не менее фанатично ненавидят" (А. Зубинский). Так что здесь попытаюсь подытожить свои скромные опыты с данным языком. Впрочем язык и без меня достаточно распостранен, особенно в Unix-среде с ее Emacs Lisp, так что этот пост будет чем-то вроде наставления для начинающих.
В поисках описания языка можно обратиться к Wikipedia - Lisp, Common Lisp, Scheme (Scheme - один из диалектов Lisp. А интерпретатор guile, который присутствует в большинстве дистрибутивов Linux, реализует именно язык Scheme).
Начинают подготовку среды для работы Lisp с выбора реализации (интерепретатора), каковые отличаются степенью соответствия ANSI-стандарту и наличием дополнительных фич. Основные варианты - это CMUCL (Carnegie Mellon University Common Lisp), SBCL (Steel Bank Common Lisp), CLISP, GCL (GNU Common Lisp) и ECL. Под Mac есть OpenMCL. Для изучения языка любая из этих реализаций отлично подойдет, и все они хорошо документированы: GCL и ECL имеют руководства в info-формате, подробная документация по CMUCL есть на официальном сайте, помочь в её выборе призвана EncyCMUCLopedia. CLISP и SBCL также прекрасно документированы, еще стоит поставить clisp-hyperspec (/usr/ports/devel/clisp-hyperspec), reference-мануал, производный от ANSI-стандарта. Вторым компонентом среды станет SLIME (usr/ports/editors/slime) - Superior Lisp Interaction Mode for Emacs. Чтоб подключить его к Emacs'у, добавляем следующие строки в ~/.emacs:
(add-to-list 'load-path "/where/you/put/slime")
(require 'slime)
(setq inferior-lisp-program "yourlisp")
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)
(local-set-key "\r" 'newline-and-indent)
(setq lisp-indent-function 'common-lisp-indent-function)
(setq indent-tabs-mode nil)))

Не забудьте подставить свой "/where/you/put/slime" (у меня это "/usr/local/share/emacs/21.3/site-lisp/slime/") и заменить "yourlisp" на команду запуска выбранного интерпретатора. Затем запускаем Emacs, M-x, команда slime.

27 июня 2005

О эпиграфе

Да-да, о той самой фразе Дж. Локка. Пожалуй это самая глубокая мысль, которую мне поведали на лекции по философии (за что безмерно благодарен лектору), она в тяжелый для меня момент выразила всю ту силу, которой может стать для меня истинное увлечение. Силу колоссально притягательную и в то же время внушающую безграничную тревогу, доводящую до отчаяния, силу дающую возможность оценить насколько жалким и в то же время величественным есть человек, дающую стимул подняться и продолжать бой.
Нашел на одном блоге бесконечно красивую фразу - "Я попросил ангела, чтобы он поцеловал тебя. Но он вскоре вернулся и сказал, что ангел ангела не целует". Я поражен.
P.S. Кажется нет у меня подходящей фотки, чтоб запостить сюда, не знаю чем ее заменить... может какой-то рисунок найду :=)
А теперь - спать ))

Welcome this solemn night

Добро пожаловать! Наконец решил обзавестись web-дневником. Зачем? Кроме информативного его смысла, подозреваю, что тому есть причины на подсознательном уровне, желание ликвидировать недостаток общения или, в более широком смысле, стену разделяющую человека и общество? Наверное... Есть много всего, что хочется изменить в своей жизни, и не меньше того в чем следует разобраться. Примерно так как в песне группы Katatonia:
What I am supposed to be
In my life
In your life
In our life
I shut the door and close my sight
At the end of the day

А словосочетание solemn night тоже слышал у них, и что-то меня в нем привлекает, какая-то тайна, непостижимость, благородство в конце-концов, как и в cellar door.
Блог может помочь мне упорядочить собственные мысли... такой эффект мне недавно принесло написание своего психологического портрета (этим заданием обязан своему универу). Впрочем, здесь "нагружать" Вас психолоческими деталями не намерен, хотя о себе наверное вкратце напишу. Это если меня читать будут, иначе это что ж получается, снова о себе для самого же себя писать?
Так или иначе, блог перед Вами.
О названии: свою интерпретацию этого словосочетания я уже изложил, что касается его происхождения, то видевшие фильм "Донни Дарко" поймут, остальным посоветую посмотреть. Кстати сегодня - [смотрит на asclock] - вернее вчера, видел вот такую его рецензию.
О цели: помню первым блогом, что я видел, был оный у StraNNicK'a, и мой наверняка будет похож, по крайней мере в том, что своим опытом с Unix (и не только) обязательно буду делится, и если это принесет пользу другим, прекрасно. И факты из жизни наверняка будут, а что еще здесь окажется я предсказать не силах, ибо для человека совершенно естественно делится с окружающими тем, что его обуревает. Могу лишь обещать, что не будет ничего нарушающего правила сетевого этикета, и т.д. Соответственно к Вашим комментариям те же либеральнейшие требования, это на случай если меня еще кто-то будет читать :))
В добрый путь!