Определить номер в списки последнего положительного числа Scheme - Lisp
Формулировка задачи:
Решение задачи: «Определить номер в списки последнего положительного числа Scheme»
(defn f (l) (defn go (i l) (cond (null? l) 0 ((def r (go (+ 1 i) (cdr l))) (cond (> (car l) 0) (max i r) r)))) (go 0 l)) (printLn (f '(1 2 3 0 -6))) (printLn (f '(1 2 3 0 -6 8))) ........ 2 5
Объяснение кода листинга программы
В этом коде определена функция f
, которая принимает список l
в качестве аргумента. Внутри функции f
определена вспомогательная функция go
, которая принимает два аргумента i
и l
.
Если l
равно nil
, то go
возвращает 0. Иначе, она рекурсивно вызывает go
с аргументами i+1
и cdr l
, и проверяет, больше ли значение первого элемента (car l
) нуля. Если это так, то go
возвращает максимальное значение из двух последних вызовов go
. Если это не так, то go
возвращает значение последнего вызова go
.
Функция f
вызывает go
с аргументом 0 и списком l
. Результат этого вызова сохраняется в переменной r
. Затем функция f
рекурсивно вызывает go
с аргументами i+1
и cdr l
. Если значение car l
больше нуля, то go
возвращает максимальное значение из r
и нового вызова go
. Если это не так, то go
возвращает значение r
.
Функция printLn
вызывается дважды с аргументами (f '(1 2 3 0 -6))
и (f '(1 2 3 0 -6 8))
. В результате, на экран выводятся числа 2 и 5.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д