gpt4 book ai didi

if-statement - Racket编程——我的 map

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:43 24 4
gpt4 key购买 nike

如何将此程序中的 cond 替换为 if else

#lang racket

(define (my-map f lst)
(cond
[(empty? lst) empty]
[else (cons (f (first lst))
(my-map f (rest lst)))]))

最佳答案

只有一个条件和一个表达式作为结果的 cond 表达式和一个带有单个表达式作为替代项的 else 部分可以很容易地转换为 if 表达式。例如,这个:

(cond (<cond1> <exp1>)
(else <exp2>))

等同于:

(if <cond1> ; condition
<exp1> ; consequent
<exp2>) ; alternative

特别是,您的代码可以重写为:

(define (my-map f lst)
(if (empty? lst)
empty
(cons (f (first lst))
(my-map f (rest lst)))))

另请注意,cond 只是表达一系列嵌套的 if 表达式的较短方式。将其视为其他编程语言中 IF-ELSE IF-ELSE IF-ELSE 的简写。事实上,对于一般情况,许多解释器都实现了这一点:

(cond (<cond1> <exp1> <exp2>) ; we can have any number of conditions
(<cond2> <exp3> <exp4>) ; and any number of expressions after condition
(else <exp5> <exp 6>))

...作为语法转换(忽略 => 语法)扩展为:

(if <cond1>
(begin
<exp1>
<exp2>)
(if <cond2>
(begin
<exp3>
<exp4>)
(begin ; the last expression is the `else` part
<exp5>
<exp6>)))

请注意,每个条件后的表达式都在 begin 形式内,这意味着在 cond 中,它们隐含在 begin 内 -所以你可以写多个!而在 if 表达式中,只有一个表达式可以用于结果或替代,如果需要多个表达式,则必须使用 begin。一如既往,请参阅 documentation了解更多详情。

关于if-statement - Racket编程——我的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22446827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com