サーチ…
地図
Mapは、リストのすべての要素に関数を適用します。
map: (a -> b) (listof a) -> (listof b)
> (map (lambda (x) (* x 2)) (list 1 2 3 4 5)
(list 2 4 6 8 10)
> (map sqrt (list 1 4 9))
(list 1 2 3)
> (map (lambda (x) (if (even? x) "even" "odd")) (list 1 2 3))
(list "odd" "even" "odd")
折りたたむ
Fold Rightは、2つの引数をとる関数をリスト内のすべての要素に左から右に順番に適用します。
foldr: (a b -> b) b (listof a) -> b
> (foldr + 0 (list 1 2 3 4))
10
> (foldr string-append "" (list "h" "e" "l" "l" "o"))
"hello"
> (foldr cons empty (list 1 2 3 4))
(list 1 2 3 4)
Fold Leftは、同じ動作を反対方向に実行します。
foldl: (a b -> b) b (listof a) -> b
> (foldl + 0 (list 1 2 3 4)
10
> (foldl string-append "" (list "h" "e" "l" "l" "o"))
"olleh"
> (foldl cons empty (list 1 2 3 4))
(list 4 3 2 1)
フィルタ
filter
は、与えられた述語が非#f
値を返す、指定されたリスト内の各項目のリストを返します。
;; Get only even numbers in a list
> (filter even? '(1 2 3 4))
'(2 4)
;; Get all square numbers from 1 to 100
> (filter (lambda (n) (integer? (sqrt n))) (range 1 100))
'(1 4 9 16 25 36 49 64 81)
作成する
いくつかの関数f₀ f₁ … fₙ
を構成します。引数にfₙ
fₙ₋₁
を続けてfₙ₋₁
し、 fₙ
の結果にfₙ
fₙ₋₁
をfₙ₋₁
関数を返します。関数は右から左に適用され、数学的関数の構成の場合と同様に、 (f ∘ g ∘ h)(x) = f(g(h(x)))
。
> ((compose sqrt +) 16 9)
5
> ((compose - sqrt) 16)
-4
各関数のアリティには、その関数の返された値の数がその右に含まれていなければなりません。一番右の関数は、全体の構成のアリティを決定します。 compose1関数は、関数が1つの値を返し、1つの引数を返すことを強制します。しかし、compose1は、最後の関数の入力arityや、最初の関数の出力arityを制限しません。
[n input]--> first-function -->[1 output]--> ... last function -->[m output].
((compose + values) 1 2 3 4)
10
> ((compose1 + values) 1 2 3 4)
XX result arity mismatch;
expected number of values not received
expected: 1
received: 4
values...:
カレー
部分的に適用された関数を返します。
> ((curry + 10) 20)
30
curryr
は、引数を最後に挿入する必要がある場合に使用できます。言い換えれば、 (curryr list 1 2)
はいくつかのnew-arguments ...
期待する関数を生成しnew-arguments ...
。呼び出されると、その新しい関数は(list new-arguments ... 1 2)
呼び出します。
> (((curryr list) 1 2) 3 4)
'(3 4 1 2)
> ((curryr list 1 2) 3 4)
'(3 4 1 2)
> ((curryr - 30) 40)
10
> (((curryr -) 30 40))
10
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow