2016-03-04 67 views
0

图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]))])) 

有人可以解释如何变量最小,在休息的作品。我得到递归的功能,但一个变量我困惑

回答

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的每个分支中写入一次。

+1

不知道为什么球拍会这么长时间教学生的东西完全不同于他们的主要语言。这就像教他们第一次教Python一样。 – Sylwester

+3

HtDP课程[不是关于学习Racket(或任何语言)](http://www.ccs.neu.edu/home/matthias/HtDP2e/part_preface.html# %28part ._。Dr.Racket_and_the_.Teaching_.Languages%29)。正如本书的第一行所言,任何白痴都可以在几天内找到任何语言。 HtDP教授如何编程,这是一项艰巨的任务。它使用一系列简化的初学者语言来实现这一目标,它允许学生专注于重要的内容,而不是语法的特质(认为'public static void main')。 – stchang

+4

作为首先学习'local''的人,在'let'上对我更有意义,因为我们可以重复使用相同的语法来定义我们已经学过的定义。我们花费更少的时间以这种方式学习语法。 –