【无标题】Chez Scheme 7 天入门计划

张开发
2026/4/13 13:46:34 15 分钟阅读

分享文章

【无标题】Chez Scheme 7 天入门计划
欢迎来到Chez Scheme的世界。这里没有繁琐的类定义没有分号结尾只有纯粹的逻辑和括号。这是为你定制的7 天入门计划的第一天。我们要打破“编程就是写指令”的旧观念建立“编程就是求值表达式”的新直觉。 第 1 天括号里的数学课基础语法与求值 今日目标理解前缀表达式操作符在前。掌握基本数据类型数字、布尔、字符串、符号。学会定义变量和定义函数。习惯REPL读 - 求值 - 打印循环的交互方式。 核心心法在 Scheme 眼里万物皆表达式表达式都有值。格式只有一种(操作符 操作数 1 操作数 2 ...)就像数学里的1 2在 Scheme 里要把加号提到前面变成( 1 2)。 理论讲解 10 个实战例子1. 基础算术把符号提到前面Scheme 的计算器功能非常强大且支持任意精度整数再大也不会溢出。规则(运算符 数字 1 数字 2 ...)特点支持多个数字一起运算。例子 1加减乘除; 加法1 2 3 ( 1 2 3) ; 结果6 ; 乘法2 * 3 * 4 (* 2 3 4) ; 结果24 ; 除法10 / 2 (注意Scheme 默认返回分数如果需要小数需转换见例 8) (/ 10 2) ; 结果5 ; 复杂嵌套(1 2) * 3 - 3 * 3 (* ( 1 2) 3) ; 结果92. 布尔值与比较只有#f是假在 Scheme 中假只有一种写法#f(false)。注意0、空字符串、空列表统统视为真真#t(或者任何不是#f的东西)假#f例子 2真假判断; 大于 ( 5 3) ; 结果#t ; 等于 (注意Scheme 中相等通常用 数字或 equal? 通用) ( 10 10) ; 结果#t ; 0 也是真(这是新手最容易晕的地方) (if 0 0 是真的 0 是假的) ; 结果0 是真的3. 字符串与符号文本的处理字符串用双引号括起来Hello。符号 (Symbol)以单引号开头name它就像是一个没有赋值的变量名或者说是“标签”。例子 3字符串拼接; 拼接字符串 (string-append Hello, Scheme!) ; 结果Hello, Scheme! ; 获取字符串长度 (string-length Hi) ; 结果2例子 4符号的使用; 定义一个符号 (注意前面的单引号表示字面量不求值) apple ; 结果apple ; 比较两个符号是否相同 (eq? apple apple) ; 结果#t4. 定义变量给值起个名字使用define。一旦定义这个名字就代表了这个值。例子 5定义常量; 定义圆周率 (define pi 3.14159) ; 直接使用 (* pi 2) ; 结果6.28318 ; 定义一个字符串常量 (define greeting Welcome to Chez Scheme) greeting ; 结果Welcome to Chez Scheme5. 定义函数封装逻辑函数也是通过define定义的。语法糖格式(define (函数名 参数 1 参数 2) 函数体)重要函数的最后一步计算结果自动就是返回值不需要return。例子 6无参函数(define (say-hi) Hello, World!) (say-hi) ; 结果Hello, World!例子 7有参函数计算圆面积; 定义函数 area参数是 r (define (area r) (* pi (* r r))) ; 最后这一行的结果自动返回 ; 调用 (area 10) ; 结果314.159例子 8多参数与逻辑组合; 判断一个数是否在 10 到 20 之间 (define (is-between-10-and-20? n) ; and 连接多个条件全为真才为真 (and ( n 10) ( n 20))) (is-between-10-and-20? 15) ; 结果#t (is-between-10-and-20? 5) ; 结果#f6. 条件判断的雏形if虽然明天专门讲但今天要先会用最简单的二选一。语法(if 条件 真时的值 假时的值)例子 9简单的 if 判断(define (check-positive n) (if ( n 0) 正数 非正数)) ; 包含 0 和负数 (check-positive 5) ; 结果正数7. 注释与代码风格单行注释用分号;。Chez Scheme 对缩进不强制但为了人眼看懂必须缩进例子 10综合练习带注释的代码; 定义税率 (define tax-rate 0.05) ; 计算含税价格 (define (calc-total price) ; 价格 (价格 * 税率) ( price (* price tax-rate))) ; 计算并输出 (calc-total 100) ; 结果105.0 练习题 (仅限今日所学)请打开 Chez Scheme依次完成以下任务。如果报错请检查括号是否匹配。温度转换器定义一个名为c-to-f的函数接收摄氏度c返回华氏度。公式Fc×1.832F c \times 1.8 32Fc×1.832测试(c-to-f 0)应返回32.0(c-to-f 100)应返回212.0。正方形面积判断定义一个名为big-square?的函数接收边长side。如果面积大于 100返回字符串Big否则返回Small。提示需要用到define,*,if,。三数之和与积定义一个函数sum-and-product接收三个数字a,b,c。返回一个列表今天先简单点返回两个值的和与积的差吧或者只返回和修正题目定义函数calc-weird接收a,b。返回(a b) * (a - b)。测试(calc-weird 5 2)-(7 * 3) 21。布尔逻辑挑战定义一个函数is-adult?接收age。如果age大于等于 18返回#t否则返回#f。思考如果传入字符串 “twenty” 会发生什么试着运行一下感受报错⚠️ 常见坑 (新手必读)括号不匹配错误(define (f x) (* x 2(少了一个右括号)错误(define (f x) (* x 2))(正确)Chez Scheme 技巧当你输入左括号(时IDE 或终端通常会高亮对应的右括号。如果没有高亮或高亮位置不对肯定错了。空格是生命线错误(1 2)- 解释器会认为1是一个变量名而不是加号。正确( 1 2)- 操作符和操作数之间必须有空格。没有返回值这回事不要写return。函数体里最后一行代码算出来是什么结果就是什么。如果你写了(define (f x) (if ( x 0) yes) )(少了 else 分支)当 x 为负数时函数返回未定义值通常什么都不打印或打印特定标记这在逻辑上是错误的。大小写敏感Define和define是不同的。Scheme 关键字通常全小写。除法的陷阱在 Chez Scheme 中(/ 3 2)的结果可能是分数3/2而不是1.5。如果需要小数可以使用exact-inexact转换或者其中一个数写成小数(/ 3.0 2)。 下一步预告明天我们将深入条件判断 (cond)和逻辑组合并解决今天if只能二选一的局限性让程序真正学会“做选择”。现在请打开你的 Chez Scheme开始第一天的代码之旅吧遇到报错不要慌把报错信息读出来它通常会告诉你哪一行括号没对上。

更多文章