计划中的列表列表
list of a list in scheme
我有一个从 lambda 获得的列表,我想创建(和 return)一个包含列表元素的列表。 Scheme 不让我做。
#lang racket
(define omega
(lambda (n)
(if (= n 0) 'Φ
(cons (omega (- n 1)) '(omega (- n 1))))))
这里有 2 个输出:
> (omega 0)
'Φ
> (omega 1)
'(Φ omega (- n 1))
> (omega 2)
'((Φ omega (- n 1)) omega (- n 1))
第一个输出是正确的,但我希望第二个输出是:
'(Φ '(Φ))
并且 (omega 2) 将 return
'(Φ '(Φ) '(Φ '(Φ)))
实际上,我想要的结果,用数学符号表示是:
ω(n) = If n=0 return ϕ, else, return ω(n-1)∪{ω(n-1)}
要获得您想要的输出,开始 将其更改为
(define omega
(lambda (n)
(if (= n 0) 'Φ
(cons (omega (- n 1))
;; '(omega (- n 1))
(list 'quote (omega (- n 1)))
))))
这并没有产生您想要的结果,但主要的是,您想要包含 评估 的 结果 嵌套代码,而不是像您所做的那样的代码本身。
在评论中你写的是你真正想要的是
ω n = IF n=0 THEN ϕ ELSE ω(n-1)∪{ω(n-1)}
实际上翻译为
(define omega
(lambda (n)
(if (= n 0) (list 'Φ) ; must enclose it in a list to avoid errors
(append (omega (- n 1))
(list (omega (- n 1)))))))
产生
'(Φ)
'(Φ (Φ))
'(Φ (Φ) (Φ (Φ)))
在 DrRacket 中。
我有一个从 lambda 获得的列表,我想创建(和 return)一个包含列表元素的列表。 Scheme 不让我做。
#lang racket
(define omega
(lambda (n)
(if (= n 0) 'Φ
(cons (omega (- n 1)) '(omega (- n 1))))))
这里有 2 个输出:
> (omega 0)
'Φ
> (omega 1)
'(Φ omega (- n 1))
> (omega 2)
'((Φ omega (- n 1)) omega (- n 1))
第一个输出是正确的,但我希望第二个输出是:
'(Φ '(Φ))
并且 (omega 2) 将 return
'(Φ '(Φ) '(Φ '(Φ)))
实际上,我想要的结果,用数学符号表示是:
ω(n) = If n=0 return ϕ, else, return ω(n-1)∪{ω(n-1)}
要获得您想要的输出,开始 将其更改为
(define omega
(lambda (n)
(if (= n 0) 'Φ
(cons (omega (- n 1))
;; '(omega (- n 1))
(list 'quote (omega (- n 1)))
))))
这并没有产生您想要的结果,但主要的是,您想要包含 评估 的 结果 嵌套代码,而不是像您所做的那样的代码本身。
在评论中你写的是你真正想要的是
ω n = IF n=0 THEN ϕ ELSE ω(n-1)∪{ω(n-1)}
实际上翻译为
(define omega
(lambda (n)
(if (= n 0) (list 'Φ) ; must enclose it in a list to avoid errors
(append (omega (- n 1))
(list (omega (- n 1)))))))
产生
'(Φ)
'(Φ (Φ))
'(Φ (Φ) (Φ (Φ)))
在 DrRacket 中。