#functional-programming #scheme #racket
#функциональное программирование #схема #ракетка
Вопрос:
Я не знаю, как задать этот вопрос. По сути, мой профессор решил проблему, в которой он не использовал логическое выражение (and , or, not) в операторе cond . Итак, я попытался придумать фиктивный пример, и я заметил кое-что особенное. Как вы можете видеть ниже. Я не знаю, почему true false дает мне false вместо перехода к оператору else, но когда я делаю false true, он переходит к оператору else. Я рассматриваю это как оператор AND, и я знаю, что ошибаюсь.
(cond ((= 2 2) (= 3 3))
(else "Hello")) ; --> T T --> #t
(cond ((= 2 2) (= 3 1))
(else "Hello")) ; --> T F --> #f
(cond ((= 2 1) (= 3 3))
(else "Hello")) ; --> F T --> "Hello"
(cond ((= 2 1) (= 3 1))
(else "Hello")) ; --> F F --> "Hello"
Комментарии:
1. Car каждого предложения является условием, а все остальное — это то, что выполняется, если выполняется это условие.
Ответ №1:
Есть три уравнения, которые вы должны знать.
1.
(cond
[#t <A>]
.........)
оценивает до <A>
.
2.
(cond
[#f <A>]
.........)
оценивает, чтобы
(cond
.........)
То есть, когда LHS предложения есть #f
, просто «вычеркните» это предложение.
3.
(cond
[else <A>])
оценивает до <A>
.
В ваших примерах:
1.
(cond ((= 2 2) (= 3 3))
(else "Hello"))
=
(cond (#t (= 3 3))
(else "Hello"))
Используя первое уравнение, мы получаем, что результат должен быть (= 3 3)
= #t
.
2.
(cond ((= 2 2) (= 3 1))
(else "Hello"))
=
(cond (#t (= 3 1))
(else "Hello"))
Используя первое уравнение, мы получаем, что результат должен быть (= 3 1)
= #f
.
3.
(cond ((= 2 1) (= 3 3))
(else "Hello"))
=
(cond (#f (= 3 3))
(else "Hello"))
Используя второе уравнение, мы получаем, что оно должно вычисляться как:
(cond (else "Hello"))
Используя третье уравнение, мы получаем, что оно должно оцениваться "Hello"
как .
4.
(cond ((= 2 1) (= 3 1))
(else "Hello"))
=
(cond (#f (= 3 1))
(else "Hello"))
Используя второе уравнение, мы получаем, что оно должно вычисляться как:
(cond (else "Hello"))
Используя третье уравнение, мы получаем, что оно должно оцениваться "Hello"
как .
Ответ №2:
cond
Синтаксис
(cond (condition1 value1)
(condition2 value2)
...
(conditionN valueN))
Итак, вашими условиями являются (= 2 2)
, (= 2 1)
, и else
(что эквивалентно #t
в a cond
-выражении), а возможными значениями являются (= 3 3)
, (= 3 1)
, и «Привет».
И
(cond (condition value1)
(else value2))
эквивалентно
(if condition value1 value2)
итак, у вас есть эквивалент
(if (= 2 2)
(= 3 3)
"Hello")
(if (= 2 2)
(= 3 1)
"Hello")
и так далее.