Realm Of Racket-猜数字
(A First Racket Program)
猜数字,最简单,最古老的游戏
游戏虽然简单,但是用上了二分查找的方法
假设数字是18,大概过程是这样
>(guess)
50
>(smaller)
25
>(smaller))
12
>(bigger)
18
三个基本功能,(guess),(smaller),(bigger)
首先定义上下边界
用define定义变量
>(define lower 1)
>lower
1
>(define upper 100)
>upper
100
用define定义函数, 基本形式是
(define (function-name argument-name ...)
function-body-expression
function-body-expression
...)
guess的定义如下
(define (guess)
(quotient (+ lower upper) 2))
guess函数没有参数,直接写(guess), 接下来就是取lower和upper的中间值
smaller的定义
(define (smaller)
(set! upper (max lower (sub1 (guess))))
(guess))
set!读作set-bang,基本形式
(set! variable expression)
给variable赋值expression
smaller先算出新的upper,然后再赋值给upper,然后再展示新的(guess)值
bigger的定义
(define (bigger)
(set! lower (min upper (add1 (guess))))
(guess))
与smaller类似,计算新的lower,然后展示新的(guess)
main函数
(define (start n m)
(set! lower (min n m))
(set! upper (max n m))
(guess))
跟上面的guess对比,start有参数,(start n m)
使用min和max,参数的顺序可以任意
假设我们猜的数字是19
>(start 1 30)
15
>(bigger))
23
>(smaller)
19)
总结:
1. 使用define定义变量和函数,函数区分有参数和无参数
2. 使用set!(set-bang)改变变量的值