Рекурсивные определения

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

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

person SarahCaw    schedule 26.03.2020    source источник


Ответы (1)


В своем текущем состоянии 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) ())
person Óscar López    schedule 26.03.2020