第 1 部分 · Racket 核心
控制流
控制流
掌握条件表达式、循环构造、let 绑定和 local 定义。
条件表达式
#lang racket ;; if 表达式 (if (> 5 3) "yes" "no") ; => "yes" ;; cond 表达式(多分支) (define (classify n) (cond [(< n 0) "negative"] [(= n 0) "zero"] [else "positive"])) (classify -3) ; => "negative" (classify 0) ; => "zero" (classify 7) ; => "positive"
when 与 unless
(when (> x 0) (displayln "positive") x) (unless (null? lst) (displayln (length lst)))
let 绑定
;; let:并行绑定 (let ([x 10] [y 20]) (+ x y)) ; => 30 ;; let*:顺序绑定 (let* ([x 10] [y (* x 2)]) (+ x y)) ; => 30 ;; letrec:递归绑定 (letrec ([even? (lambda (n) (if (= n 0) #t (odd? (- n 1))))] [odd? (lambda (n) (if (= n 0) #f (even? (- n 1))))]) (even? 10)) ; => #t
循环
Racket 主要通过递归实现循环,但也提供了命令式循环:
;; for 循环 (for ([i '(1 2 3 4 5)]) (displayln i)) ;; for-list:收集结果 (for/list ([i '(1 2 3 4 5)]) (* i i)) ; => '(1 4 9 16 25) ;; for-sum (for/sum ([i '(1 2 3 4 5)]) i) ; => 15
小结
Racket 的控制流以表达式为核心。if 和 cond 处理分支,let 系列管理局部绑定,for 系列处理迭代。