Вывод строки чисел без пробелов, а затем вывод значения в виде списка чисел - Lisp
Формулировка задачи:
Определить функцию (Z1 k n), где k<n, которая сначала выводит строку
чисел без пробелов k k+1 k+2 ... n,
а затем на другой строке выводит значение в ввиде списка чисел
(k k+1 k+2 .. n)
Задание вроде не сложное, но с языком дружу плохо, а сделать нужно. Получилось только так.
Листинг программы
- (defun z1(k n)
- (cond ((= n 0) t)
- (t (prin1 k)
- (z1 (+ k 1) (- n 1))))
- (cond ((/= n 0) t)
- (t (prin1 (cons k (cons (+ k 1) nil))))))
Решение задачи: «Вывод строки чисел без пробелов, а затем вывод значения в виде списка чисел»
textual
Листинг программы
- (defun p1 (k n)
- (cond ((> k n) (terpri))
- (t (print k) (p1 (+ k 1) n))))
- ==> P1
- (defun p2 (k n)
- (cond ((> k n) nil)
- (t (cons k (p2 (+ k 1) n)))))
- ==> P2
- (defun task (k n)
- (p1 k n)
- (p2 k n))
- ==> TASK
- (task 5 10)
- 5678910
- ==> (5 6 7 8 9 10)
Объяснение кода листинга программы
В коде дано три функции: P1, P2 и TASK.
- Функция P1 принимает два аргумента: k и n.
- Если k больше n, то выводится символ terpri (потоковый перевод строки).
- Иначе, вызывается рекурсивно функция P1 с аргументами k+1 и n.
- Выводится значение k.
- И вызывается функция P1 с аргументами k+1 и n.
- Функция P2 принимает два аргумента: k и n.
- Если k больше n, то возвращается значение nil.
- Иначе, вызывается рекурсивно функция P2 с аргументами k+1 и n.
- В качестве первого аргумента функции CONS передается значение k.
- И вызывается функция P2 с аргументами k+1 и n.
- Функция TASK принимает два аргумента: k и n.
- Вызывается функция P1 с аргументами k и n.
- Вызывается функция P2 с аргументами k и n. В результате выполнения кода выводится строка чисел от 5 до 10 без пробелов. Затем выводится список чисел (5 6 7 8 9 10).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д