Уроки LISP/1
Загальна інформація
Словом LISP у наш час позначають групу споріднених мов програмування, найпоширенішими Шаблон:Tooltio є Common Lisp, Scheme та Clojure. Існують і інші лісп-подібні мови. І хоча під словом «Лісп» у вузькому розумінні частіше мається на увазі CL, тут ми будемо розглядати переважно Scheme та Clojure.
Для початку, бажано встановити якийсь лісп-транслятор.
Scheme існує в безлічі реалізацій та діалектів, між якими можуть бути деякі відмінності. Я орієнтуюсь переважно на JVM, тому використовую KAWA і SISC, хоча більшість реалізацій Scheme обходяться без джави. З відомих реалізацій можна згадати, наприклад, GNU Guile (не знаю, правда, наскільки воно кросплатфорне в умовах Win32).
Clojure реалізовано для JVM, також є реалізації для деяких інших віртуальних платформ (CLR (.NET/Mono), JS), якими я не користувався, тому нічого певного сказати не можу. Більшість інформації про Clojure, доступна в мережі, стосується JVM-реалізації.
На комп'ютері має бути встановлена Java (якщо її нема — встановіть).
Clojure можна скачати звідси: http://clojure.org/downloads
Скачуємо архів, розпаковуємо (наприклад, у C:\Program Files\clojure-1.3.0\).
В цьому каталозі створюємо файл clojure.bat, відкриваємо його в блокноті, пишемо наступне:
@echo off setlocal set CLOJURE_HOME=%~dp0 if defined classpath ( set classpath=%CLOJURE_HOME%\clojure-1.3.0.jar;%classpath% ) else set classpath=%CLOJURE_HOME%\clojure-1.3.0.jar java clojure.main %*
Далі для запуску інтерпритатора будемо використовувати clojure.bat — для зручності, можна створити ярлик до нього, також є сенс прописати шлях до нього в змінній середовища path, щоб спростити запуск з командного рядка.
Робота з лісп-подібними мовами передбачає, як правило, можливість використання інтерактивного середовища, також Шаблон:Відомого як REPL (Read-Eval-Print Loop — цикл читання-обчислення-друку). Іншими словами, запустивши інтерпритатор, ми можемо безпосередньо в ньому ввести якийсь вираз і отримати результат. Приклад:
Clojure 1.3.0 user=> (+ 1 2 3) 6 user=> (list 1 2 3) (1 2 3) user=> (cons 1 (list 2 3)) (1 2 3) user=> (cons 1 (cons 2 (cons 3 ()))) (1 2 3) user=>