Я дам вам несколько советов, чтобы вы могли найти ответ самостоятельно. Заполняющая пробелы:
(define (partition n lst)
(cond (<???> ; if the list is empty
<???>) ; then return the empty list
((< <???> n) ; if the lists' length is less than n
<???>) ; return a list with lst as its only element
(else ; otherwise
(cons ; cons a list with the result of
(<???> lst n) ; grabbing the first n elements of lst with
(<???> n ; the result of advancing the recursion and
(<???> lst n)))))) ; removing the first n elements of lst
Очевидно, что вы должны будете использовать take
и drop
где-то в растворе, как это предусмотрено в описании проблемы. Проверьте свое решение следующим образом:
(partition 3 '(a b c d e f g h))
=> '((a b c) (d e f) (g h))
(partition 3 '(a b c d e f g h i))
=>'((a b c) (d e f) (g h i))
Большое вам спасибо! Я заполнил пробелы в нем, и я получаю (конд ((пусто? LST) LST ((<(длина LST) п) LST) (еще (минусы (взять LST п) (раздел п (drop lst n)))))) , но когда я это делаю (раздел 3 '(abcdefgh)), я получаю ((abc) (def) gh), поэтому его отсутствует скобка перед g и мне было интересно, что я сделал неправильно, чтобы я мог сделать это »((abc) (def) (gh)) вместо (.... gh). Является ли моя функция drop или take неправильно написана, что приводит к тому, что (пришлось написать мой собственный take & drop) – user1869703
@ user1869703 заметить, что во втором случае вы должны вернуть «список с lst как единственный элемент». Другими словами, это: '(list lst)' –
О, ладно, спасибо за вашу помощь. – user1869703