Scheme - Lisp (229338)
Формулировка задачи:
пытаюсь написать программу, которая для списка определяет максимальное количество идущих подряд атомов.
в http://ideone.com/gMrzjU говорит что успешно, но результат неизвестен((( подскажите как его увидеть, где я не права?
(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))))
Решение задачи: «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 выводится на экран. Список вызовов функций и их номера:
- (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)))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д