【问题标题】:Racket recursive variable?球拍递归变量?
【发布时间】:2016-03-04 12:28:32
【问题描述】:

图。 《如何设计程序》中的65如下:

; Nelon -> Number
; determines the smallest number on l
(define (inf l)
  (cond
    [(empty? (rest l)) (first l)]
    [else
     (local ((define smallest-in-rest (inf (rest l))))
       (cond
         [(< (first l) smallest-in-rest) (first l)]
         [else smallest-in-rest]))]))

有人能解释一下最小静态变量是如何工作的吗?我在函数中得到递归,但变量让我感到困惑

【问题讨论】:

    标签: recursion racket


    【解决方案1】:

    这只是以下内容的简写(简写;-)):

    (let ((smallest-in-rest (inf (rest l))))
      (cond
        [(< (first l) smallest-in-rest) (first l)]
        [else smallest-in-rest]))
    

    let 应该清楚地表明我们只是存储(inf (rest l)) 的结果,因此它只需要在代码中编写一次,而不是为cond 的每个分支编写一次。

    【讨论】:

    • 想知道为什么 Racket 不遗余力地教学生一些与他们的主要语言完全不同的东西。这就像先教他们 Python 来教 JavaScript..
    • HtDP 课程is not about learning Racket (or any language)。正如本书第一行所说,任何白痴都可以在几天内学会任何语言。 HtDP 教授如何编程,这是一项艰巨的任务。它使用一系列简化的初学者语言来做到这一点,这使学生可以专注于重要的事情,而不是语法的特殊性(想想public static void main)。
    • 作为一个首先学习local 的人,它对我来说比let 更有意义,因为我们可以将相同的语法重用于我们已经学过的定义。我们用这种方式学习语法的时间更少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2013-09-24
    • 2014-11-02
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多