CLISP
Реализация языка программирования LispКаноническая реализация ANSI Common Lisp, дополняющая стандарт ANSI рядом расширений. CLISP написан на C и Common Lisp. CLISP является частью проекта GNU и доступен под лицензией GNU GPL.
В состав CLISP входят интерпретатор, компилятор, дебаггер и ряд расширений, в том числе длинная арифметика, числа с плавающей точкой произвольной точности, регулярные выражения и т.д.
CLISP используется для бутстрапной компиляции других реализаций (SBCL, CMUCL) и ряда систем (например, Maxima)
Ссылки:
Примеры:
Hello, World!:
Пример для версий Corman Common Lisp 3.0, clisp 2.47, gcl 2.6.6Результат выполнения этого кода в интерактивном режиме имеет следующий вид:
Hello, World!
NIL
Первая строка содержит стандартный поток вывода, вторая — значение, возвращаемое кодом (в данном случае — его отсутствие).
(format t "Hello, World!~%")
Факториал:
Пример для версий Corman Common Lisp 3.0, clisp 2.47, gcl 2.6.6Этот пример использует рекурсивное определение факториала, естественное для Lisp. Демонстрирует следующие особенности языка:
-
математические операторы:
(- n 1)— это префиксная запись, эквивалентная инфиксной записиn-1; -
операторы сравнения:
(= n 0)возвращает T, если n равно нулю, иnil(используется как false) в противном случае; -
условный оператор
if: выражения в Lisp определяются по скобкам и могут записыватся в несколько строк; -
определение функции с использованием
defun; -
макрос Common Lisp
loop; -
спецификации формата вывода в
format:~Dсоответствует целому числу, а~%— концу строки.
(defun factorial (n)
(if (= n 0)
1
(* n (factorial (- n 1))) ) )
(loop for i from 0 to 16
do (format t "~D! = ~D~%" i (factorial i)) )
Числа Фибоначчи:
Пример для версий Corman Common Lisp 3.0, clisp 2.47, gcl 2.6.6Используется рекурсивное определение чисел Фибоначчи. Часть finally макроса loop выполняется после конца цикла.
(defun fibonacci (n)
(if (< n 3)
1
(+ (fibonacci (- n 1)) (fibonacci (- n 2))) ))
(loop for i from 1 to 16
do (format t "~D, " (fibonacci i))
finally (format t "...~%"))
Числа Фибоначчи:
Пример для версий Corman Common Lisp 3.0, clisp 2.47, gcl 2.6.6Этот пример использует итеративное определение чисел Фибоначчи без запоминания, выраженное через рекурсивный вызов функции fib-iter.
(defun fibonacci (n)
(defun fib-iter (a b count)
(if (zerop count)
b
(fib-iter (+ a b) a (- count 1))
)
)
(fib-iter 1 0 n)
)
(loop for i from 1 to 16
do (format t "~D, " (fibonacci i))
finally (format t "...~%")
)
Факториал:
Пример для версий Corman Common Lisp 3.0, clisp 2.47, gcl 2.6.6Внутренний цикл с операцией collect создает список чисел от 1 до n, после чего к нему применяется операция *.
(loop for n from 0 to 16
do (format t "~D! = ~D~%" n
(apply '* (loop for i from 1 to n
collect i)) ) )
Квадратное уравнение:
Пример для версий Corman Common Lisp 3.0, clisp 2.47, gcl 2.6.6Common Lisp позволяет работать с комплексными числами и выводить их на печать в формате #C(real imag). Функция write-to-string преобразует число в строку.
(defun quadratic-roots-2 (A B C)
(cond ((= A 0) (string "Not a quadratic equation."))
(t
(let ((D (- (* B B) (* 4 A C))))
(cond ((= D 0) (concatenate 'string "x = " (write-to-string (/ (+ (- B) (sqrt D)) (* 2 A)))))
(t
(concatenate 'string (concatenate 'string "x1 = " (write-to-string (/ (+ (- B) (sqrt D)) (* 2 A))))
(concatenate 'string "~%x2 = " (write-to-string (/ (- (- B) (sqrt D)) (* 2 A)))))))))))
(let ((A (read))
(B (read))
(C (read)))
(format t (quadratic-roots-2 A B C)))
CamelCase:
Пример для версий Corman Common Lisp 3.0, SBCL 1.0.1, clisp 2.47(defun camel-case (s)
(remove #\Space
(string-capitalize
(substitute #\Space nil s :key #'alpha-char-p))))
(princ (camel-case (read-line)))
Комментарии
]]>blog comments powered by Disqus
]]>