计划中的列表列表

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 中。