2015-01-13 2 views
1
(define result (assoc n cache)) 
(cond 
    [result => second] 
    [else ...]) 

Что означает =>? Я предполагаю, что он запускает second по адресу result и возвращает значение? Что это называется и где я могу узнать об этом больше?Что означает этот символ в Racket?

+1

Может быть, [здесь] (http://docs.racket-lang.org/reference/if.html?q= % 3D% 3E #% 28form ._% 28% 28lib._racket% 2Fprivate% 2Fletstx-scheme..rkt% 29._cond% 29% 29)? –

ответ

2

Предложение [result => second] обрабатывается как это, cond:

  1. Результат выражение вычисляется и результат сохраняется во временной переменной, скажем, t.
  2. Если значение было недействительным, тогда вычисляется выражение second и результат сохраняется, например, f.
  3. Если значение f является функцией, то оценивается (f t) и его результат становится результатом выражения cond.
  4. Если f не является функцией, сигнализирует об ошибке.

Расширение

(cond 
    [result => second] 
    [else something]) 

что-то вроде

(let() 
    (define t result) 
    (if t (second t) 
     something)))) 
2

В этом случае, это означает то же самое, как

(cond (result (second result)) 
     (else ...)) 

В общем, положение Cond из

(foo => bar) 

означает, что если foo вычисляется в truthy значение, то ее значение сохраняется, и передается как аргумент bar (который должен оценивать процедуру, которая принимает один аргумент).

2

Это означает: если условие оценивает истинное значение, отправьте это значение функции справа. Он находится в documentation. Например:

(define alst '((x 1) (y 2) (z 3))) 

; if the list contains an association with the `y` key, return the second element 
; of that association, which happens to be the value `2` 
(cond ((assoc 'y alst) => second) 
     (else #f)) 
=> 2 
Смежные вопросы