LINUX.ORG.RU

История изменений

Исправление 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. предоставляется читателю (нужно написать другую ф-ю)