Вопрос к «Как разрабатывать программы», данные фиксированного размера, 1.7, упражнение 9 - PullRequest
0 голосов
/ 20 января 2019

Упражнение следующее: «Упражнение 9. Добавьте следующую строку в область определений DrRacket: (определите в…) Затем создайте выражение, которое преобразует значение в в положительное число. Для строки оно определяеткакова длина строки; для изображения она использует площадь; для числа она уменьшает число на 1, если оно уже не равно 0 или отрицательно; для #true используется 10 и для #false 20. "

Моя проблема только в том, чтобы понять последнюю часть этого числа.Я не совсем понимаю, что с этим происходит.Насколько я понимаю, я определяю число, а затем должен сделать if-утверждение.Это должно вычесть число на 1, с не или 0. Однако это говорит также тогда, если верно, я должен использовать 10 и если ложь 20, я действительно не понимаю, что они имеют в виду, я должен использовать 10 или 20?

Пока я только что сделал код, который делает, что если число равно 0 или отрицательно, то оно должно оставить число как есть, если оно больше 0, то оно вычитает 1.

(define in 23)
(if (<= in 0) in (- in 1))

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Спасибо за ваш ответ. Я думаю, что понимаю это больше.

Пока я это сделал.


Для строки

(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.


Для логического значения (однако этот не работает, он говорит: "=: ожидает число в качестве 1-го аргумента, учитывая #true")

(define in #true)
(if (= in #true) 10 20)    

(сейчас я не совсем уверен, как мне нужно изменить эту часть, чтобы она работала.)


Я думаю, что кроме логической части, до сих пор все выглядит хорошо. Я попытался выяснить, как сделать логическое значение, но я действительно не уверен, как его переписать.

Что касается cond, я действительно пока не пробовал там много. Я думаю, что мне нужно перечитать главы раньше.

0 голосов
/ 20 января 2019

В нем говорится, что если 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 s.

...