サーチ…
構文
(define(name arguments ...)body)
(関数の引数...)
単純な関数呼び出し
ラケットの中の関数を呼び出すには、その引数の後ろにカッコで囲みます。これは(function argument ...)
ように見え(function argument ...)
。
> (define (f x) x)
> (f 1)
1
> (f "salmon")
"salmon"
> (define (g x y) (string-append x y))
> (g "large" "salmon")
"largesalmon"
> (g "large " "salmon")
"large salmon"
+
や*
ような演算も関数であり、 f
やg
を呼び出すのと同じ構文を使います。
> (+ 1 2)
3
> (* 3 4)
12
> (+ (* 3 3) (* 4 4))
25
詳細と例については、「ラケットガイド」の「 関数呼び出し 」を参照してください。
キーワードの引数
ラケット関数はキーワード引数を持つこともできます。 キーワード引数はキーワードとそれに続く引数式で指定します。キーワードは#:
で始まり、キーワード引数は#:keyword arg-expr
ます。関数呼び出しの中では、これは(function #:keyword arg-expr)
ます。
> (define (hello #:name n)
(string-append "Hello " n))
> (hello #:name "John")
"Hello John"
> (hello #:name "Sarah")
"Hello Sarah"
> (define (kinetic-energy #:mass m #:velocity v)
(* 1/2 m (sqr v)))
> (kinetic-energy #:mass 2 #:velocity 1)
1
> (kinetic-energy #:mass 6 #:velocity 2)
12
詳細と例については、ラケットガイドのキーワード引数を参照してください。
`apply`関数
リストを持っていて、そのリストの要素を関数の引数として使用したい場合は、あなたが望むものがapply
:
> (apply string-append (list "hello" " " "and hi" " " "are both words"))
"hello and hi are both words"
> (apply + (list 1 2 3 4))
10
> (apply append (list (list "a" "b" "c") (list 1 2 3) (list "do" "re" "mi")))
(list "a" "b" "c" 1 2 3 "do" "re" "me")
apply
は2つの引数があります。最初の引数は適用する関数で、2番目の引数は引数を含むリストです。
apply
コール
(apply + (list 1 2 3 4))
同等です
(+ 1 2 3 4)
apply
の主な利点は、それが関数の引数から来る追加リストとリストを含む任意の計算されたリストで動作することです。
> (apply + (append (list 1 2 3 4) (list 2 3 4)))
19
> (define (sum lst)
(apply + lst))
> (sum (list 1 2 3 4))
10
> (sum (append (list 1 2 3 4) (list 2 3 4)))
19
詳細と例については、「ラケットガイド」の「 apply
関数 」を参照してください。
関数の定義
ラケットの関数は、 lambda
形式で作成することができます。フォームは引数とボディのリストを取ります。
(lambda (x y) (* x y))
上記の例では、関数は2つの引数をとり、それらの乗算結果を返します。
> ((lambda (x y) (* x y)) 4 4)
16
> ((lambda (x y) (* x y)) 3 2)
6
2つの数字を乗算するたびに、関数とその本体を書き直すのは面倒です。名前を付けましょう。名前を付けるには、 define
フォームを使用しdefine
。関数を名前にバインドします。
(define multiply (lambda (x y) (* x y)))
今我々はmultiply
を呼び出すことによって関数を参照することができます
> (multiply 5 2)
10
プロシージャを名前にバインドするのは非常に一般的なので、Racketは定義フォームを使用して関数を定義するための略語を提供します。
(define (multiply x y) (* x y))
詳細と例については、「ラケットガイド」の「 関数:ラムダ 」を参照してください。