История изменений
Исправление den73, (текущая версия) :
Как-то так (не тестировал и скобки мог неверно посчитать, что в мире лиспа является нормой :) )
(defstruct struct
(name "" :type string)
(department_id 0 :type integer))
(declaim (ftype (function (struct struct) t)) struct<)
(defun struct< (a b) "Сортировка по dept_id, потом по name"
(or
(< (struct-department_id a) (struct-department_id b))
(and (= (struct-department_id a) (struct-department_id b))
(string< (struct-name a) (struct-name b)))))
;; это не массив структур, а массив
(let ((my-array (make-array '(2) :element-type struct
:initial-contents
(list ; да, это коряво, а иначе руками заполняй
(make-struct :department_id 1 ...)
(make-struct ...)))))
(sort my-array #'struct<))
; 3.2. предоставляется читателю (нужно написать другую ф-ю)
Исходная версия den73, :
Как-то так:
(defstruct struct
(name "" :type string)
(department_id 0 :type integer))
(declaim (ftype (function (struct struct) t)) struct<)
(defun struct< (a b) "Сортировка по dept_id, потом по name"
(or
(< (struct-department_id a) (struct-department_id b))
(and (= (struct-department_id a) (struct-department_id b))
(string< (struct-name a) (struct-name b)))))
;; это не массив структур, а массив
(let ((my-array (make-array '(2) :element-type struct
:initial-contents
(list ; да, это коряво, а иначе руками заполняй
(make-struct :department_id 1 ...)
(make-struct ...)))))
(sort my-array #'struct<))
; 3.2. предоставляется читателю (нужно написать другую ф-ю)