首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自然数的集合论定义(von序数)

自然数的集合论定义(von序数)
EN

Stack Overflow用户
提问于 2020-01-12 15:16:18
回答 2查看 371关注 0票数 1

我需要编写这个函数,但我不知道如何..。

这个函数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

找到一个完整的定义这里

使用实例:

代码语言:javascript
复制
> (von-neumann 0)
()
> (von-neumann 1)
(())
> (von-neumann 2)
(() (()))
> (von-neumann 3)
(() (()) (() (())))
> (von-neumann 4)
(() (()) (() (())) (() (()) (() (()))))

我有这个..。

代码语言:javascript
复制
(define von-neumann
  (lambda (n)
    (cond [(= n 0) '()]
          [(= n 1) '(())]
          [else (append '(() (())) 111 ) ])))
EN

回答 2

Stack Overflow用户

发布于 2020-01-14 13:32:04

这指的是数字

您的尝试代码非常好,几乎完成了,但是您在这一行中有一个错误:

代码语言:javascript
复制
         [else (append '(() (())) 111 ) ])))

相反,您需要做的是将集版本n-1附加到包含设置版本n-1的集合中。像这样

代码语言:javascript
复制
         [else (append (von-neumann (- n 1)) (list (von-neumann (- n 1))))]
票数 1
EN

Stack Overflow用户

发布于 2020-01-15 09:27:25

你需要做的是这样做:

代码语言:javascript
复制
(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测试了它。我使用了维基百科在条目自然数的集合论定义 (也称为https://en.wikipedia.org/wiki/Ordinal_number#Von_Neumann_definition_of_ordinals)中找到的定义。

还请注意,可以使用简单的(append n-1 (list n-1)),而不是(cons n-1 n-1),但是在这种情况下,集合将被反转-- 4 = ((((()) ()) (()) ()) ((()) ()) (()) ())

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59705204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档