【问题标题】:convert one big quote to string/list in scheme将一个大引号转换为方案中的字符串/列表
【发布时间】:2012-05-02 09:54:41
【问题描述】:

我有这个任务要做,我需要解析一个错误的书面递归过程,并修复它。 例如: 这个:

(let ((fib (lambda (n) 
             (cond    ((= n 0) 1) 
                         ((= n 1) 1) 
                        (else (+ (fib (- n 1)) (fib (- n 2))))))))
           (fib n))

转换成这样:

(let ((fib (lambda (n fib-param) 
                    (cond ((= n 0) 1) 
                              ((= n 1) 1) 
                             (else (+ (fib-param (- n 1) fib-param)  
                                      (fib-param (- n 2) fib-param))))))) 
  (fib n fib)) 

该过程以引号的形式给出,包含 3 个部分:“let”、let 的 the 和主体。 我想解析第二部分(意思是,我想列出一个列表,其中的每个术语都是“let”表达式中的一个单词),但无论我尝试什么,我似乎都无法解决。

我正在使用 drRacket 方案。

感谢和抱歉这么长的消息。

【问题讨论】:

  • s/let/letrec/ ;p 提示:这是 Y 组合子。
  • 如果我说我不明白你的答案,你会原谅我吗? :D 我对计划有点陌生...
  • 这不是答案,而是评论 :) 第一部分是个玩笑(尽管是一个可行的解决方案,只需将 let 替换为 letrec)。
  • 我很想这样做,但这是针对大学的一门课程,输出应该完全按照他们的要求,就像我给你的例子一样。

标签: scheme y-combinator racket


【解决方案1】:

您可能想阅读:http://www.dreamsongs.com/Files/WhyOfY.pdf,它解释了如何进行这种转换。您的作业是一种经典的编程语言技术,用于仅使用过程应用程序进行递归。

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 2012-05-15
    • 2013-10-28
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多