如何编写Scheme语言的bal-val单参数过程以返回对应球的数值
我来帮你搞定这个bal-val过程~根据你给出的球值规则,我们可以用Scheme的条件判断特性来实现,这里有几种实用的写法:
方法1:用cond做多条件判断(最通用)
cond是Scheme里处理多分支判断的常用工具,写法直观,适合新手理解:
(define (bal-val ball) (cond ((eq? ball 'R) 5) ; 匹配符号'R时返回5 ((eq? ball 'G) 4) ; 匹配符号'G时返回4 ((eq? ball 'B) 3) ; 匹配符号'B时返回3 ((eq? ball 'W) 1) ; 匹配符号'W时返回1 (else (error "Unknown ball type:" ball)))) ; 处理未知输入,避免程序崩溃
方法2:用case简化符号匹配
如果你的输入都是Scheme符号(比如'R、'G),用case会更简洁,它专门用来处理符号匹配场景:
(define (bal-val ball) (case ball ((R) 5) ((G) 4) ((B) 3) ((W) 1) (else (error "Unknown ball type:" ball))))
特殊情况:如果输入是字符串
要是你的输入是字符串(比如"R"而不是'R),只需要把判断函数换成string=?就行:
(define (bal-val ball) (cond ((string=? ball "R") 5) ((string=? ball "G") 4) ((string=? ball "B") 3) ((string=? ball "W") 1) (else (error "Unknown ball type:" ball))))
使用示例
调用的时候直接传入对应的符号或字符串就行:
(bal-val 'R) ; => 5 (bal-val 'G) ; => 4 (bal-val 'B) ; => 3 (bal-val 'W) ; => 1 (bal-val 'Y) ; 会抛出错误:Unknown ball type: Y
内容的提问来源于stack exchange,提问作者yellowjacket14
相关产品推荐
相关产品推荐

