В Схеме функции - это объекты, такие как числа, строки и т. Д. Таким образом, в этом случае ваш пример эквивалентен следующему:
(define (equal-length x y)
(= (string-length x) (string-length y)))
(splitby '("a" "b" "cc" "ab" "abc" "a" "b") equal-length)
Использование функции позволяет разрешить критерию разделениянастроены.В этом случае элементы находятся в одной группе до тех пор, пока данная функция возвращает истинное значение;в противном случае создается новая группа.
Чтобы начать, напишите функцию group-equal
, которая группирует равные элементы:
(define (group-equal lst)
...)
, где, например,
(group-equal '(1 2 2 3 3 3 4))
возвращает
((1) (2 2) (3 3 3) (4))
Если вы успешно это реализовали, то она идентична вашей splitby
функции, за исключением того, что вы используете данную функцию (например, equal-length
) вместо equal?
(как group-equal
может использовать).