Я изучаю общие учебные пособия, но я не знаком с этим.Как я могу получить (function '(a b a a b c)) => ((a a a) (b b))?
Как я могу получить следующий результат?
(function '(a b a a b c)) => ((a a a) (b b))
Я изучаю общие учебные пособия, но я не знаком с этим.Как я могу получить (function '(a b a a b c)) => ((a a a) (b b))?
Как я могу получить следующий результат?
(function '(a b a a b c)) => ((a a a) (b b))
Это довольно просто. У вас есть remove-if
и remove-if-not
. Они работают так:
(remove-if-not (lambda (x) (eq x 'a)) '(a b a a b c)) ; ==> (a a a)
(remove-if (lambda (x) (eq x 'a)) '(a b a a b c)) ; ==> (b b c)
Теперь, если у вас есть аргумент, и это не nil
использовать выше, чтобы сделать первый элемент результата и то, что список, чтобы перейти к рекурсии.
Типичная рекурсивная функция:
(defun group (list)
(if (endp list)
nil
(cons <??> (group <??>))))
Есть более эффективные способы сделать это, и вы можете сделать свои собственные функции, вместо того, чтобы полагаться на remove-if(-not)
в качестве упражнения.
SO не является бесплатной услугой кодирования, вы должны попытаться решить ее самостоятельно, это единственный способ узнать, как программировать. Если вы не можете заставить его работать, опубликуйте то, что вы попробовали, и мы покажем вам, где вы поступили неправильно, и как его исправить. – Barmar