2016-06-29 2 views

답변

3

자세한 인수 처리 절차 만들기 설명서에서 찾을 수 있습니다.

6.10.4.1 λ *를 정의하고 *.

람다 * 옵션 및 키워드 인수를 허용하는 일부 확장있는 경우를 제외하고, 람다 같다.

library syntax: lambda* ([var…] 
[#:optional vardef…] 
[#:key vardef… [#:allow-other-keys]] 
[#:rest var | . var]) 
body1 body2 … 

옵션 및 키워드 인수는 변수 이름과 표현의 2 요소의 목록을 제공하여, 호출에 존재하지 를 취할 기본 값을 가질 수 있습니다.

(define* (frob foo #:optional (bar 42) #:key (baz 73)) 
    (list foo bar baz)) 

foo는 예를 들어 고정 인수가, 바, 기본적 값 (42)에 선택적 인수입니다, 그리고 바즈는 73 기본 값 표현하지 않는 평가되지 않습니다 기본 값 키워드 인수입니다 그들은 필요하며 까지 프로 시저가 호출됩니다. 키,하지만 추가 # : (키워드 인수 선언 후) 정의 할 수-다른-키를 알 수없는 키워드를 무시 호출 번호로 지정된 이외의 키워드가있는 경우

는 일반적으로는 오류입니다. 에서

: 구성표 표준 define*에서

https://www.gnu.org/software/guile/docs/master/guile.html/lambda_002a-and-define_002a.html#lambda_002a-and-define_002a

1

정의하지만, 명명 규칙 별표로 끝나는 모든 기호가없는 상징으로 매우 유사한 동작을 제공 할 것을 지시하지 않는다.

표준에서는 변수를 바인드하는 let과 변수를 바인딩하지만 한 번에 하나씩 let*을 사용하므로 생성 된 변수가 다음 바인딩에서 사용 가능합니다.

Scheme을 확장하는 표준 방법 인 SRFI가 있습니다. 구현은 많은 SRFI를 구현하고, 많은 경우 참조 구현을 다운로드하는 것만으로는 불가능한 사람들을 구현합니다. SRFI-89 implementsdefine*lambda*이며 Scheme에 선택적 위치 인수가 제공됩니다. Guile's SRFI support을보고 SRFI-89는 표시되지 않지만 SRFI-89 자체는 #!key 대신에 #:key이라는 표기법을 사용한다는 점을 제외하고는 Guile이 가지고 있다고 언급합니다.

R5RS 구현은 표준보다 많은 전역 바인딩을 갖는 것이 일반적입니다. SRFI의 일부가 아닌 경우 이러한 확장을 사용하여 잠겨 있습니다.

관련 문제