Я знаю, что это немного элементарно, но мне очень неудобно писать код схемы, и я хочу убедиться, что то, что я делаю, является хорошей практикой. Я знаю, что мутации в схеме не одобряются.
У меня нет другого источника отзывов, поэтому я пришел ко всем вам
(define (filter-lst fn lst)
(if (not (null? lst))
(if (fn (car lst))
(cons (car lst) (filter-lst fn (cdr lst)))
(filter-lst fn (cdr lst))
)
'()
)
)
Примечание: функция, похоже, работает в соответствии с несколькими тестовыми примерами, которые я запускал.
В качестве дополнительного ИСТИННО СТИЛИСТИЧЕСКОГО вопроса, какой из них предпочтительнее?
# 1
(define (merge l1 l2)
(if (null? l1) l2
(if (null? l2) l1
(cons (car l1) (cons (car l2) (merge (cdr l1) (cdr l2)))))))
# 2
(define (merge l1 l2)
(if (null? l1) l2
(if (null? l2) l1
(cons (car l1) (cons (car l2) (interleave (cdr l1) (cdr l2))))
)
)
)
