почему это делает времена lisp l oop, вызывающие у меня проблемы? - PullRequest
1 голос
/ 07 февраля 2020

Пытаюсь реализовать функциональный элемент I, который возвращает i-й элемент списка.car списка - это элемент 0,1 et c, и я пытаюсь использовать dotimes l oop вместе с функция pop, и я продолжаю получать ошибки

(defun element-i (y L)
;; (setq m )
  (let ((m ( cdr L));;(return car L))
    (dotimes(m (cdr L) t)
      (if (equal y 0) (return car L)
     (pop car L)
       (setq i (+ m L)))))))

1 Ответ

4 голосов
/ 07 февраля 2020

У вас есть ряд вопросов здесь. Во-первых, вы используете параметр 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.

...