Я пытаюсь получить список из списка, заданного в качестве параметра, который имеет только элементы в четных позициях.
Итак, если у меня есть '(a b c d e f), я должен получить '(ac e). Я также хочу сделать это итеративно с помощью do.
(defun pozpar (lst)
(do ((l lst (cdr l))
(y 0 (+ y 1))
(x '() (cond ((eql 0 (mod y 2))
(cons (car l) x)))))
((null l) x)))
POZPAR
> (pozpar '(a b c d e f))
NIL
Я не понимаю, что не так с кодом и почему в списке только nil.
@SilvioMayolo: CLisp - это не язык. Common Lisp называется Common Lisp и обычно обозначается аббревиатурой CL. CLISP — это конкретная реализация Common Lisp, как и SBCL и LispWorks.
Вы пропустили пункт «else» в cond
.
Попробуй это
* (defun pozpar(lst)
(do ((l lst (cdr l))
(y 0 (+ y 1))
(x '() (cond ((eql 0 (mod y 2)) (cons (car l) x))
(t x))))
((null l) x)))
* (reverse (pozpar '(a b c d e f)))
(A C E)
Это похоже на Common Lisp, но я только предполагаю. Пожалуйста, отметьте конкретный язык в дополнение к тегу [lisp]. Последний включает большое семейство языков, включая CLIsp, ELisp, Racket и Clojure, и в конечном итоге они довольно разные.