К основному контенту

common lisp | defstruct

 

(defstruct person name age) ;;обьявили тип 

(defgeneric toString (obj));; определели интерфейс

(defmethod toString ((obj person)) ;; реализовали интрефейс для типа person
  (format nil "[Person: name = '~A', age = '~A']"
	  (person-name obj)
	  (person-age obj)))

(defparameter alice (make-person
		     :name "Alice"
		     :age 12))

(defparameter bob (make-person
		     :name "Bob"
		     :age 21))


(write-line (toString alice))
;; напечатает
;; [Person: name = 'Alice', age = '12']

(write-line (toString bob))
;; напечатает
;; [Person: name = 'Bob', age = '21']

;; сравнение 
(format t "alice is equal bob: ~A~%" (equalp alice bob)) ;; => nil

(defparameter bob2 (make-person
		     :name "Bob"
		     :age 21))

(format t "bob is equal bob2: ~A~%" (equalp bob  bob2)) ;; => t

;;(setf x (toString 1)) <= завершится с ошибкой несоотвествия типа


Комментарии

Отправить комментарий

Популярные сообщения из этого блога

Будда не принимает форм

Будда не практикует дзен. Смотрите не видя,  слушайте не слыша,  знайте не зная.

Кирилица в Arch Linux

После вчерашних обновлений в консоли Arch Linux при выборе русской локали вместо букв печатаются белые квадратики. Очевидно, что по какой-то причине не загружается прописанный в rc.conf шрифт. Временное лекарство от этого: выполнить команду setfont cyr-sun16 . Еще у меня в момент начальной загрузки появляется рябь на экране как от сильных электромагнитных помех в ЭЛТ, хотя у меня ЖК. Может быть это как-то связано.

Сортировка массивов в groovy

Любой массив в java и groovy можно отсортировать статическим методом: Arrays.sort(c); причем это будет очень быстро сто тысяч элементов типа int сортируются за 1 секунду на celeron M 1,8 Mg. Если это массив объектов можно использовать перегруженный метод Arrays.sort(c,comporator);