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

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

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

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

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

textual
Листинг программы
  1. (defun len (lst)
  2.   (prog (n)
  3.     (setq n 0)
  4.     (return
  5.      (loop
  6.       (when (null lst) (return n))
  7.       (setq n (+ n 1) lst (cdr lst))))))
  8.  
  9. ==> len
  10.  
  11. (len '(a d v))
  12.  
  13. ==> 3

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

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

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


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

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

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы