对“如何设计程序”的问题,我固定大小的数据,1.7,练习9

时间:2019-01-20 09:27:59

标签: racket

练习如下: “练习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))

2 个答案:

答案 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,我真的还没有尝试太多。我想我需要重新阅读各章。