Scheme - Lisp (229338)

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

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

пытаюсь написать программу, которая для списка определяет максимальное количество идущих подряд атомов.
(define (max a b) (cond ((> a b) a b)))
 
(define (one-elem-list l) (and (list? l) (and (not (null? l)) (null? (cdr l)))))
 
(define (f l)
    (define (go a b l)
        (cond ((null? l) (max a b)
              (one-elem-list (car l)) (go a (+ 1 b) (cdr l))
              (go (max a b) 0 (cdr l)))))
    (go 0 0 l))
 
(display (f '(1 1 1)))
(display (f '(1 (1) (1) 1 (1) ((1 1 1)) (1) (1) (1 1) (1) (1) 1 (1))))
в http://ideone.com/gMrzjU говорит что успешно, но результат неизвестен((( подскажите как его увидеть, где я не права?

Решение задачи: «Scheme»

textual
Листинг программы
(define (task lst)
  (define (count x c m)
     (cond ((null? x) (if (> c m) c m))
           ((list? (car x)) (if (> c m) (count (cdr x) 0 c) (count (cdr x) 0 m)))
           (#t (count (cdr x) (+ c 1) m))))
  (count lst 0 0))
  
  (display (task '(1 2 (1) (2) (3) 4 5 6)))

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

В коде определена функция task, которая принимает на вход список lst. В функции task определена вспомогательная функция count, которая принимает три аргумента: x, c и m. Если x — это null, то возвращается c и m. Если x — это список, то возвращается c, 0 и m. Если x — это #t, то возвращается c+1, 0 и m. Затем вызывается функция count для списка lst, начальными значениями c и m равными 0. Значение функции count выводится на экран. Список вызовов функций и их номера:

  1. (define (task lst)
  2. (define (count x c m)
  3. (cond ((null? x) (if (> c m) c m))
  4. ((list? (car x)) (if (> c m) (count (cdr x) 0 c) (count (cdr x) 0 m)))
  5. (#t (count (cdr x) (+ c 1) m))))
  6. (count lst 0 0))
  7. (display (task '(1 2 (1) (2) (3) 4 5 6)))

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


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

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

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