Определить номер в списки последнего положительного числа Scheme - Lisp

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

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

Определить номер в списки последнего положительного числа Scheme и Haskell (извините, что не по теме). Считается, что списки имеют многоуровневую структуру
Помогите написать программу на двух языках, очень надо. Сегодня сдавать

Решение задачи: «Определить номер в списки последнего положительного числа Scheme»

textual
Листинг программы
(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.

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


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

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

15   голосов , оценка 4.133 из 5