Я работал над реализацией марша Джарвиса для обычного языка.Алгоритм марша Джарвиса берет набор точек и возвращает выпуклую оболочку этого облака точек.Я представляю каждую точку в виде структуры, подобной этой:
(defstruct point x y)
Затем я определил набор тестов, но, поскольку нотация для инициализации структуры довольно длинная (make-point :x 0 :y 1)
, я решилсоздайте функцию, которая автоматически сделала это для меня:
(defun make-points (list)
(map
'list
(lambda (e) (make-point :x (first e) :y (second e)))
list))
К сожалению, это не сработало.
(print (first (make-points '('(2 3))))) ;prints out '#S(POINT :X QUOTE :Y (2 3))' => wrong
(print (make-point :x 2 :y 3)) ;prints out '#S(POINT :X 2 :Y 3)' => correct
Связывает полный список (2 3) со значением yвсе вещи, и это ничего не присваивает значение х.Почему это происходит и как я могу это исправить.
Заранее спасибо, я довольно новичок в lisp (как вы могли догадаться по этому вопросу), и я был бы очень признателен, если кто-томожет помочь мнеЕсли кто-то знает какие-либо ярлыки или имеет какие-либо веские аргументы против моего метода работы, это также было бы неплохо, хотя, возможно, было бы лучше сообщить мне их в комментариях, поскольку они не будут непосредственно отвечать на вопрос.