Написание схемы (функционального программирования) функции фильтра

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

У меня нет другого источника отзывов, поэтому я пришел ко всем вам

(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))))
        )
    )  
)

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *