代码之家  ›  专栏  ›  技术社区  ›  J. Doe

方案中列表的列表

  •  0
  • J. Doe  · 技术社区  · 7 年前

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

    #lang racket
    (define omega
      (lambda (n)
        (if (= n 0) 'Φ
            (cons (omega (- n 1)) '(omega (- n 1))))))
    

    以下是两个输出:

    >  (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)}
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Will Ness Derri Leahy    7 年前

    要获得所需的输出, 开始 将其更改为

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