SBCL
Реализация языка программирования LispSteel Bank Common Lisp (SBCL) — одна из самых распространенных реализаций Common Lisp. Является динамично развивающимся форком CMUCL
Ссылки:
Примеры:
Квадратное уравнение:
Пример для версий Corman Common Lisp 3.0, SBCL 1.0.1, SBCL 1.0.29, 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, SBCL 1.0.29, clisp 2.47(defun camel-case (s)
(remove #\Space
(string-capitalize
(substitute #\Space nil s :key #'alpha-char-p))))
(princ (camel-case (read-line)))
Факториал:
Пример для версий Corman Common Lisp 3.0, SBCL 1.0.1, SBCL 1.0.29, 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)) ) )
Hello, World!:
Пример для версий Corman Common Lisp 3.0, SBCL 1.0.1, SBCL 1.0.29, clisp 2.47, gcl 2.6.6Результат выполнения этого кода в интерактивном режиме имеет следующий вид:
Hello, World!
NIL
Первая строка содержит стандартный поток вывода, вторая — значение, возвращаемое кодом (в данном случае — его отсутствие).
(format t "Hello, World!~%")
Факториал:
Пример для версий Corman Common Lisp 3.0, SBCL 1.0.1, SBCL 1.0.29, 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, SBCL 1.0.1, SBCL 1.0.29, 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 "...~%"))
Комментарии
]]>blog comments powered by Disqus
]]>