LINUX.ORG.RU

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

Исправление monk, (текущая версия) :

На с++

Ну для этого в лиспах тюплы не надо

;; это пишется один раз
(defun struct< (a b accessors)
  (cond
    ((null accessors) nil)
    ((let ((accessor (car accessors))
           (gen< #'<))
       (when (consp accessor)
         (setf gen< (cdr accessor)
               accessor (car accessor)))
       (funcall gen< (funcall accessor a) (funcall accessor b))
     t)
    (t (struct< a b (cdr accessors)))))

(defun make-struct< (accessors)
  (lambda (a b) (struct< a b accessors)))

И вот полный аналог C++

(let ((v (make-array ...)))
  (sort v (make-struct< (list #'struct-department_id (cons #'struct-department_name #"string<))))
  ...
  (sort v (make-struct< (list (cons #'struct-department_name #"string<)))))

Исходная версия monk, :

На с++

Ну для этого в лиспах тюплы не надо

;; это пишется один раз
(defun struct< (a b accessors)
  (cond
    ((null accessors) nil)
    ((let ((accessor (car accessors))
           (gen< #'<))
       (when (consp accessor)
         (setf gen< (cdr accessor)
               accessor (car accessor)))
       (funcall gen< (funcall accessor a) (funcall acessor b))
     t)
    (t (struct< a b (cdr accessors)))))

(defun make-struct< (accessors)
  (lambda (a b) (struct< a b accessors)))

И вот полный аналог C++

(let ((v (make-array ...)))
  (sort v (make-struct< (list #'struct-department_id (cons #'struct-department_name #"string<))))
  ...
  (sort v (make-struct< (list (cons #'struct-department_name #"string<)))))