Запишите с использованием предложения PROG функцию (аналог встроенной функции LENGTH ) - Lisp

Узнай цену своей работы

Формулировка задачи:

Запишите с помощью предложения PROG функцию (аналог встроенной функции LENGTH ), которая возвращает в качестве значения длину списка (количество элементов на верхнем уровне). Я только начала разбираться в LISPе и не совсем понимаю, что нужно ввести, чтобы получить результат. Помогите)
(defun len (lst)
  (prog ((l 0))
    loop
      (if (null lst) (return l))
      (setq lst (cdr lst))
      (setq l (+ l 1))
    (go loop)
  )
)

Решение задачи: «Запишите с использованием предложения PROG функцию (аналог встроенной функции LENGTH )»

textual
Листинг программы
(defun len (lst)
  (prog (n)
    (setq n 0)
    (return 
     (loop
      (when (null lst) (return n))
      (setq n (+ n 1) lst (cdr lst)))))) 
 
==> len
 
(len '(a d v))
 
==> 3

Объяснение кода листинга программы

В коде определена функция LENGTH, которая имеет один аргумент lst. Внутри функции используется предложение PROG, которое состоит из двух частей. В первой части переменной n присваивается значение 0. Во второй части используется цикл LOOP, который выполняется до тех пор, пока список lst не станет пустым. При каждой итерации цикла значение переменной n увеличивается на 1, а значение списка lst уменьшается на один элемент (при помощи функции CDR). Когда список становится пустым, в цикле используется условие WHEN, которое проверяет, не является ли пустым список. Если это так, то в функцию возвращается значение переменной n. Если же список не пустой, то цикл продолжается. В конце функции возвращается значение переменной n. Аргумент функции — список '(a d v). Функция возвращает значение 3, потому что в списке три элемента.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы