Теория множеств c определение натуральных чисел (ординалы фон Неймана) - PullRequest
1 голос
/ 12 января 2020

Мне нужно запрограммировать эту функцию, но я не знаю, как ..

Эта функция von-neumann является рекурсивной, где определено

zero как empty set, номер

one определяется как the set that contains the empty set и

N определяется как the union of the set N-1 and the set that contains N-1.

Полное определение найдено здесь .

Пример использования:

> (von-neumann 0)
()
> (von-neumann 1)
(())
> (von-neumann 2)
(() (()))
> (von-neumann 3)
(() (()) (() (())))
> (von-neumann 4)
(() (()) (() (())) (() (()) (() (()))))

У меня есть это ..

(define von-neumann
  (lambda (n)
    (cond [(= n 0) '()]
          [(= n 1) '(())]
          [else (append '(() (())) 111 ) ])))

Ответы [ 2 ]

1 голос
/ 15 января 2020

Что вам нужно сделать, это так:

(define von-neumann
  (lambda (n)
    (if (zero? n)
        '()
        (let ((n-1 (von-neumann (- n 1))))
          (append n-1 (list n-1))))))


1 ]=> (for-each
 (lambda (n)
   (newline)
   (display n)
   (display (length n)))
 (map von-neumann (iota 5 0 1)))
()0
(())1
(() (()))2
(() (()) (() (())))3
(() (()) (() (())) (() (()) (() (()))))4
;Unspecified return value

Я проверил это с mit-scheme. Я использовал определение, найденное в Википедии в записи теорема множеств c определение натуральных чисел (также известное как ординалы фон Неймана ).

Обратите внимание, что вместо (append n-1 (list n-1)) можно использовать просто (cons n-1 n-1), но в этом случае наборы будут изменены на противоположные - 4 = ((((()) ()) (()) ()) ((()) ()) (()) ()).

1 голос
/ 14 января 2020

Это относится к https://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers

Ваш код попытки очень хорош, почти готов, но у вас есть ошибка в этой строке:

         [else (append '(() (())) 111 ) ])))

вместо этого вам нужно добавить версию набора n-1 с набором, содержащим версию набора n-1. Как это

         [else (append (von-neumann (- n 1)) (list (von-neumann (- n 1))))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...