Нужно записать функцию length итеративно через PROG - Lisp
Формулировка задачи:
Через COND сделал, но через PROG не получается
Функция (LENGTH х) является встроенной функцией, которая возвращает в качестве значения длину списка (количество элементов на верхнем уровне). Определить функцию LENGTH сначала рекурсивно с помощью предложения COND и затем итеративно с помощью предложения PROG.
Решение задачи: «Нужно записать функцию length итеративно через PROG»
textual
Листинг программы
(defun idiotic-len (lst) (prog (l) (setq l 0) loop (when (null lst) (return l)) (setq l (+ 1 l) lst (cdr lst)) (go loop)))
Объяснение кода листинга программы
В данном коде определена функция idiotic-len со следующими шагами:
- (defun idiotic-len (lst) ...) - определение функции с именем idiotic-len, которая принимает аргумент lst.
- (prog (l) ...) - начало итеративной конструкции.
- (setq l 0) - инициализация переменной l значением 0.
- (loop (when (null lst) (return l)) ...) - начало цикла loop.
- (setq l (+ 1 l) lst (cdr lst)) ... - увеличение значения переменной l на 1, удаление первого элемента из списка lst и присваивание нового значения lst.
- (go loop) ... - переход на начало цикла loop.
- (when (null lst) (return l)) ... - условие завершения цикла loop, если lst равно null, то возвращается значение переменной l.
- (setq l (+ 1 l) lst (cdr lst)) ... - выполняется до тех пор, пока lst не станет пустым списком.
- (go loop) ... - переход на начало цикла loop.
- (return l) ... - возвращение значения переменной l, которое является длиной списка lst.
- (end-of-file) ... - конец итеративной конструкции. Итоговый результат выполнения функции idiotic-len для списка lst будет равен его длине.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д