Какой самый простой способ гарантировать, что 2 списка в lisp имеют одинаковую длину? - PullRequest
8 голосов
/ 27 октября 2010

Учитывая 2 списка, я хочу убедиться, что они имеют одинаковый размер, мне трудно с этим кодом. Должен ли я использовать переменные для этого?

(defun samesize (list1 list2)
  (cond (;logic here) T))

Ответы [ 3 ]

7 голосов
/ 27 октября 2010

Оба Common Lisp и elisp имеют length:

(defun samesize (list1 list2)
  (= (length list1) (length list2)))
2 голосов
/ 27 октября 2010

Вы можете использовать рекурсию, если хотите реализовать это самостоятельно.

2 списка имеют одинаковый размер, если они оба пусты. Они имеют разный размер, если один пуст, а другой нет. И если ни одно из этих утверждений не соответствует действительности, они имеют такое же сравнение размеров, что и списки без одного элемента (то есть их cdr -s)

0 голосов
/ 03 мая 2014

Нет необходимости явно использовать длину дважды.

(defun samesize (l1 l2)
  (apply #'= (mapcar #'length (list l1 l2)))

Это может показаться потраченным впустую усилием, но с более длинными именами функций такое полезно

Я также надеялся продемонстрировать новую концепцию.

СУХОЙ (не повторяйся)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...