Рекурсивные определения - PullRequest
0 голосов
/ 26 марта 2020

В настоящее время я изучаю рекурсию в Схеме. Я нашел это рекурсивное определение, но я не понимаю, что он пытается сделать. Если бы кто-то мог мне это объяснить, я был бы признателен. Вот определение:

(define (function ls)
    (if (null? ls) '()
        (append
            (map (lambda (x) (cons (car ls) x))
                 (function (cdr ls))
            )
            (function (cdr ls))
        )
    )
)

1 Ответ

2 голосов
/ 26 марта 2020

В своем текущем состоянии function просто возвращает пустой список, независимо от ввода . Тем не менее, звонит . Это выглядит как неудачная попытка реализовать функцию powerset:

(define (powerset ls)
  (if (null? ls)
      '(())
      (append (map (lambda (x) (cons (car ls) x))
                   (powerset (cdr ls)))
              (powerset (cdr ls)))))

Можете ли вы заметить разницу? базовый случай в вашем коде неверен! Если вам интересно, powerset возвращает набор всех возможных подмножеств списка:

(powerset '(1 2 3))
=> '((1 2 3) (1 2) (1 3) (1) (2 3) (2) (3) ())
...