练习如下: “练习9.将以下行添加到DrRacket的定义区域: (在…中定义) 然后创建一个表达式,将in的值转换为正数。对于字符串,它确定字符串的长度。对于图像,它使用该区域;对于数字,除非数字已经为0或负数,否则它将数字减1。对于#true,它使用10,对于#false,它使用20。“
我的问题是只了解数字的最后一部分。我不完全了解会发生什么。据我了解,我用数字定义,然后必须做一个if陈述。它应该将数字减1,with不是或0。但是它也说如果是,我应该使用10,如果是false 20,我真的不明白我应该使用10还是20的含义吗?
到目前为止,我刚刚编写了一个代码,该代码可以做到:如果数字为0或负数,则数字应保持不变,如果数字大于0,则减去1。
(define in 23)
(if (<= in 0) in (- in 1))
答案 0 :(得分:1)
它表示,如果in
本身的值为#true
,则该表达式应为10
。这与“如果条件(在if
中)的计算结果为#true
,则该表达式应计算为10
的情况不同,据我所知,这是您当前的(但不正确)解释。
例如:
(define in #true)
<your expression>
<your expression>
的评估结果应为10
(define in #false)
<your expression>
<your expression>
的评估结果应为20
(define in 23)
<your expression>
<your expression>
的计算结果应为22
(因为in
是既不为0也不为负的数字)。
(define in "hello")
<your expression>
<your expression>
的计算结果应为5
(长度为"hello"
)。
以此类推。
还请注意,当in
计算为非正数时,该练习并未描述<your expression>
应该精确计算的结果,但它确实说应该为正。您当前的代码(“保留数字原样”)是错误的,因为结果将不是肯定的。
请确保您已详细阅读第1.7节。您将需要使用boolean?
,number?
,string?
,image?
,string-length
等。您可能还会发现cond
(在“序言:如何编程”中介绍)比一堆if
更方便使用。
答案 1 :(得分:0)
感谢您的回答。我想我了解得更多。
到目前为止,我做到了。
对于字符串
(define in "kitty")
(if (string? in) (string-length in) in)
结果是5
对于图像(我写图片的地方是图片而不是文字。) (在图片中定义。)
(if (image? in) (* (image-width in) (image-height in)) in)
结果是8775
为电话号码
(define in 23)
(if (<= in 0) in (- in 1))
结果是22。
对于布尔值(但是这个不起作用,它说:“ =:在给定#true的情况下,期望数字作为第一个参数)
(define in #true)
(if (= in #true) 10 20)
(我现在不确定,我需要如何更改它的工作原理。)
我认为除了布尔部分,到目前为止看起来还不错。我试图弄清楚如何做布尔值,但是我真的不确定如何重写它。
对于cond,我真的还没有尝试太多。我想我需要重新阅读各章。