Scheme中if-else语句编写方法及双if转if-else实现(非Racket)
在标准Scheme中使用if-else语句的方法
嘿,我来帮你搞定标准Scheme里的if-else用法,还有你那两段代码的转换问题~
首先说基础:标准Scheme(非Racket这类扩展方言)里的if本身就支持else分支,语法是这样的:
(if <判断条件> <条件成立时执行的代码> <条件不成立时执行的代码>)
如果某个分支里需要执行多条语句,就用begin把它们包起来——就像你原来代码里用的那样,这点你已经做对啦。
接下来看你给的两段独立if代码:
(if (symbol? x) (begin (display "ONE") ) ) (if (integer? x) (begin (display "TWO") ) )
原来的逻辑是不管x是不是符号,都会检查它是不是整数,要是两个条件都满足(标准Scheme里不会出现这种情况,但扩展方言里可能有),会同时输出ONE和TWO。但如果要转成互斥的if-else逻辑(也就是满足第一个条件就不检查第二个),可以用嵌套if来实现,因为标准Scheme没有专门的elif语法,嵌套就是实现多分支的方式:
(if (symbol? x) (begin (display "ONE")) (if (integer? x) (begin (display "TWO")) ; 如果需要处理两个条件都不满足的情况,就在这里加代码,不需要的话可以直接删掉这个分支 (begin)))
如果每个分支只有display这一条语句,其实可以省略begin,简化成:
(if (symbol? x) (display "ONE") (if (integer? x) (display "TWO")))
这样逻辑完全和你要的if-else一致:先判断是不是符号,是就输出ONE;否则判断是不是整数,是就输出TWO;都不是的话什么也不做。
内容的提问来源于stack exchange,提问作者code263
相关产品推荐
相关产品推荐

