У вас есть ряд вопросов здесь. Во-первых, вы используете параметр y
, но внутри функции вы вызываете его i
. Далее L
- это список, поэтому (+ m L)
сообщит об ошибке. С другой стороны, я думаю, что вы намереваетесь использовать m
как целое число, но вы инициализируете его как (cdr L)
, который является списком. Кроме того, функция pop
изменяет список L
, но гораздо проще использовать переменную для указания на следующий элемент списка, не изменяя список, просто сказав (setq m (cdr m))
.
Вы можете переписать функция в более простом смысле, думая так: возьмите переменную m
и инициализируйте ее как L
. L oop i
раз по списку, делая каждый раз m
равным (cdr m)
, то есть тот же список минус первый элемент предыдущего l oop. После выхода из l oop m
появится подсписок, автомобиль которого является i
-ым элементом L
.