2013-10-24 4 views
0

Может кто-нибудь объяснить эти функции для меня в ракетке. Я полностью потерял. Пожалуйста, помогите мне с некоторыми примерами. Благодаря! Я просто не могу понять эти функции для жизни меня.Cond If And Or in Racket

+0

Причины закрытия вопросов включают в себя: «Вопросы, касающиеся проблем с кодом, который вы написали, должны описывать конкретную проблему - и включать в себя действительный код для его воспроизведения - в самом вопросе». «Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают и ожидаемые результаты». Если вы экспериментировали с этими операторами, какие результаты вы получили, что было неожиданным? Чего ты ожидал? Пожалуйста, будьте конкретны. –

+2

Все, что говорилось, важно знать, что вы знакомы с этими операторами, и я бы посоветовал вам взглянуть на документацию Racket, особенно [2.12 Условные обозначения: if, cond, and and and] (http: // docs .racket-lang.org/reference/if.html), который включает описания и примеры этих операторов. –

ответ

3

Во-первых, если:

(if (positive? 1) 1 -1) 

ракетка сначала вычисляет, если 1 является положительным (?, Который является первым expresion (положительный 1)). Если это так, возвращает 1, else, return -1. Это эквивалентно c-подобным языкам:

if (positive?(1)) 
    return 1 
else 
    return -1 

Конд - это в основном, если у него есть несколько вариантов. Эквивалент в C-подобных языках бы еще, если

(cond [(first-condition) (what-to-do)] 
     [(second-condition) (what-to-do)] 
     [(third-condition) (you-get-the-idea)]) 

А и Или просто логические операторы, что эквивалентно & & и || в C-подобных языках

(and true true) => true 
(and true false) => false 

(or true true) => true 
(or true false) => true 
(or false false) => false 
+0

cond является немного более сложным, чем это, хотя это распространенное использование для отправки на случай. – WorBlux

0

If является оператором turnary. Он имеет три аргумента, если первый аргумент не имеет значения #f, он вернет значение второго аргумента, в противном случае значение третьего аргумента.

OR принимает один или несколько аргументов, оценивает их по одному, слева направо, и возвращает первое значение, если считает, что не #f и возвращает #f если аргумент удовлетворяет этому условию.

AND принимает один или более аргументов оценить их по одному, слева направо, если он находит один, который #f возвращает #f, в противном случае она возвращает значение последнего аргумента, что он оценивает.

COND принимает один или несколько аргументов, каждый из которых имеет один или несколько аргументов (2 - обычное число). Он оценивает каждый аргумент слева направо по одному, оценивая первое субаргажение. Если это не #f, тогда он оценивает каждый из остальных под-аргументов (если есть) в порядке и возвращает значение последнего аргумента. В противном случае он переходит к следующему аргументу и оценивает его одинаково. else - это специальный ситакс в этих подпараметрах, который всегда обрабатывается так, как если бы он не был #f.

И здесь под аргументом понимается любое действительное s-выражение.

0

NB: Если вы знакомы с не-языковыми языками, это ответ для вас. Я не пытаюсь объяснить их иначе, чем другой код. Однако другие ответы - это просто дополнение.

Ни одна из них не является функциями, а специальными формами.

(if predicate 
    consequent 
    alternative) 

довольно много, как Algol говоров if

if(predicate) 
{ 
    consequent 
} 
else 
{ 
    alternative 
} 

Обратите внимание, что предикат, как следствие, и альтернативой может быть что угодно, от сложного выражения простого значения.

cond работает больше похоже на if, elseif ..., Иначе:

(cond (predicate1 consequent1) 
     (predicaten consequentn) 
     (else alternative)) 

and работает как && в Алгол диалектов. Таким образом, false && print("Do it!") ничего не печатает, так как это короткие замыкания.

(and #f (display "Do it!")) ; ==> #f (and does not display anything since first term was false) 
(and 1 2 3) ; ==> 3 (3 is the last true value. In Scheme everything except #f is true.) 

or работает как || в Алгол диалектов. таким образом, true || print("Do it!") не печатает, поскольку первый член был истинным.

(or 'mama (display "Do it")) ; ==> mama (first true value, does not print "do it")