0

我有一个从 lambda 获得的列表,我想创建(并返回)一个包含列表元素的列表。计划不允许我这样做。

#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))

第一个输出是正确的,但我希望第二个输出是:

'(Φ '(Φ))

并且(欧米茄2)将返回

'(Φ '(Φ) '(Φ '(Φ)))

实际上,我想要的结果,用数学符号表示,是:

ω(n)  =  If n=0 return ϕ, else, return ω(n-1)∪{ω(n-1)}
4

1 回答 1

3

要获得所需的输出,首先将其更改为

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

于 2018-03-24T11:33:39.750 回答