Если я сравниваю первый и второй элемент в списке, как мне остановить его на последнем? [простая схема q] - PullRequest
0 голосов
/ 07 ноября 2011

Я новичок со схемой и меня немного смущает логика:

Допустим, я хотел получить наибольшее число из списка, и мне пришлось использовать (первые нс) и (вторые нс)

так что выражение будет состоять из:

(define (bigger ns)
        (cond
            .....
               ((> (first ns)(second ns) (cons.....(bigger (rest ns)))...))

Если я всегда сравниваю первый элемент со вторым элементом в списке, как только он достигает последнего элемента списка, второй элемент больше не будет доступен, и это вызывает ошибку. Как мне остановить это на последнем? Ведь нет последнего? Используемая функция.

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Краткий обзор того, как списки работают в Схеме, так что это может помочь вашей путанице в целом:

A пара - это две вещи, first и rest.Часто он пишется с такой точкой: (1 . 2)

A list - это либо пустой список, который также называется null, либо пара, чья вторая вещь (ее rest) - это список.

Итак, если у вас есть список чисел, подобный этому: (1 2 3 4 5) напомним, что на самом деле это серия вложенных пар: (1 . (2 . (3 . (4 . (5 . null)))))

Итак, если выповторяя серию пар, когда вы доберетесь до последней, вы узнаете, что это конец, потому что rest равен null.

0 голосов
/ 07 ноября 2011

Когда (null? (rest ns)), вы находитесь на последнем элементе, максимум - это текущий элемент (first ns), и вы можете остановить рекурсию.

...