2009-11-06 2 views
5

여러 값을 반환하고 사용하는 값 ​​및 정의 값과 같은 기능에 대한 설명서를 읽었습니다. 나는 그들이하는 일을 이해한다. 그런 일을하고 싶을 때 내게는 분명하지 않습니다.Scheme에서 (values ​​...) (define-values ​​...)을 사용하는 경우

단일 값 목록을 작성하고 대신 단일 값 목록을 사용하는 것이 좋지 않거나 불가능한 경우는 언제입니까?

답변

5

정의 값은 변수를 표현식의 결과에 직접 바인드 할 수있는 편의를 제공합니다. 명시 적으로 목록의 압축을 풀 필요가 없으므로 타이핑을 절약 할 수 있습니다. 단일 값 목록을 작성하는 것이 좋지 않거나 불가능한 경우가 있다고 생각하지 않습니다. 사실 정의 값보다 더 이식성이 좋습니다.

+0

같은 목록을 사용하면 일치 라이브러리를 사용하여 목록의 구조를 즉시 해제 할 수 있습니다. – grettke

+0

@ grettke 그러나 모든 구성표에 일치 라이브러리가있는 것은 아닙니다. ( –

+0

@Vijay : 동의합니다. 휴대용 검색 라이브러리가 있습니다. – grettke

5

Here은 내 원래 게시물입니다. 아래에 복사됩니다.

comp.lang.scheme의 this 스레드에서 여러 값을 반환하는 방법에 대해 설명합니다. 3 개 솔루션은 R6RS에 보이는 있습니다

(import (rnrs)) 

; let-values + values 
(define (foo1) 
    (values 1 2 3)) 

(let-values (((a b c) (foo1))) 
    (display (list a b c)) 
    (newline)) 

; cps 
(define (foo2 k) 
    (k 1 2 3)) 

(foo2 (lambda (a b c) 
     (display (list a b c)) 
     (newline))) 

; list 
(define (foo3) 
    (list 1 2 3)) 
(let ((result (foo3))) 
    (display result) 
    (newline)) 

당 아지즈와 아론의 관점; 대부분의 정보를 독자에게 전달하는 접근 방식을 사용해야합니다.