我需要编写这个函数,但我不知道如何..。
这个函数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 ) ])))发布于 2020-01-14 13:32:04
这指的是数字
您的尝试代码非常好,几乎完成了,但是您在这一行中有一个错误:
[else (append '(() (())) 111 ) ])))相反,您需要做的是将集版本n-1附加到包含设置版本n-1的集合中。像这样
[else (append (von-neumann (- n 1)) (list (von-neumann (- n 1))))]发布于 2020-01-15 09:27:25
你需要做的是这样做:
(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 = ((((()) ()) (()) ()) ((()) ()) (()) ())。
https://stackoverflow.com/questions/59705204
复制相似问题