수색…


통사론

  • (define (name arguments ...) body)

  • (함수 인수 ...)

간단한 함수 호출

Racket에서 함수를 호출하려면 인수 뒤에 괄호로 묶습니다. 이것은 (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 는 두 개의 인수를 취합니다. 첫 번째 인수는 적용 할 함수이고 두 번째 인수는 인수를 포함하는 목록입니다.

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))

위의 예제에서 함수는 두 개의 인수를 받아서 곱한 결과를 반환합니다.

> ((lambda (x y) (* x y)) 4 4)
16
> ((lambda (x y) (* x y)) 3 2)
6

두 개의 숫자를 곱할 때마다 함수와 본문을 다시 쓰는 것이 지루합니다. 따라서 이름을 지정하겠습니다. 이름을 지정하려면 define 양식을 사용하십시오. 함수를 이름에 바인딩합니다.

(define multiply (lambda (x y) (* x y)))

이제 multiply 를 호출하여 함수를 참조 할 수 있습니다.

> (multiply 5 2)
10

프로 시저를 이름에 바인딩하는 것이 매우 일반적이기 때문에 Racket은 define 폼을 사용하여 함수를 정의하는 약식을 제공합니다.

(define (multiply x y) (* x y))

자세한 내용과 예제는 래킷 가이드의 함수 : lambda 를 참조하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow