Это подробное руководство по основам языка Common Lisp, включающее примеры программ, которые демонстрируют различные концепции программирования на Common Lisp.
Каждая программа на Common Lisp начинается с функции defun
:
(defun main ()
(format t "Hello, World!~%"))
(main)
Основные типы данных в Common Lisp:
integer
— целые числаfloat
— числа с плавающей запятойcharacter
— одиночные символыstring
— строкиПример использования арифметических операций в Common Lisp:
(defun arithmetic-operations ()
(let ((a 10)
(b 20))
(format t "Sum: ~d~%" (+ a b))
(format t "Difference: ~d~%" (- b a))
(format t "Product: ~d~%" (* a b))
(format t "Division: ~d~%" (/ b a))
(format t "Modulus: ~d~%" (mod b a))))
(arithmetic-operations)
Ввод и вывод данных с использованием read
и format
:
(defun read-input ()
(format t "Enter an integer: ")
(let ((num (read)))
(format t "You entered: ~d~%" num)))
(read-input)
Пример использования оператора if
:
(defun conditional-example ()
(format t "Enter an integer: ")
(let ((num (read)))
(cond
((> num 0) (format t "The number is positive.~%"))
((< num 0) (format t "The number is negative.~%"))
(t (format t "The number is zero.~%")))))
(conditional-example)
Пример цикла loop
:
(defun loop-example ()
(loop for i from 0 to 4
do (format t "i = ~d~%" i)))
(loop-example)
Пример работы с массивами:
(defun array-example ()
(let ((arr #(1 2 3 4 5)))
(loop for i from 0 to (1- (length arr))
do (format t "arr[~d] = ~d~%" i (aref arr i)))))
(array-example)
Пример создания и использования функции:
(defun greet ()
(format t "Hello from the function!~%"))
(greet)
Пример создания и использования классов:
(defclass rectangle ()
((width :initarg :width :accessor rectangle-width)
(height :initarg :height :accessor rectangle-height)))
(defun area (rect)
(* (rectangle-width rect) (rectangle-height rect)))
(defun display-rectangle (rect)
(format t "Width: ~a, Height: ~a, Area: ~a~%"
(rectangle-width rect)
(rectangle-height rect)
(area rect)))
(let ((rect (make-instance 'rectangle :width 5 :height 3)))
(display-rectangle rect))
Пример использования наследования в Common Lisp:
(defclass animal ()
())
(defclass dog (animal)
())
(defmethod speak ((a animal))
(format t "Animal makes a sound.~%"))
(defmethod speak ((d dog))
(format t "Dog barks.~%"))
(let ((my-dog (make-instance 'dog)))
(speak my-dog))
В Common Lisp указатели не используются напрямую, так как язык управляет памятью автоматически.
В Common Lisp нет прямого управления памятью, используются автоматическое управление памятью и сборщик мусора.
Пример работы с файлами в Common Lisp:
(defun write-file ()
(with-open-file (stream "example.txt" :direction :output :if-exists :supersede)
(format stream "Hello, file!~%")))
(defun read-file ()
(with-open-file (stream "example.txt" :direction :input)
(loop for line = (read-line stream nil)
while line
do (format t "~a~%" line)))
(write-file)
(read-file)