여러 값을 반환하고 사용하는 값 및 정의 값과 같은 기능에 대한 설명서를 읽었습니다. 나는 그들이하는 일을 이해한다. 그런 일을하고 싶을 때 내게는 분명하지 않습니다.Scheme에서 (values ...) (define-values ...)을 사용하는 경우
단일 값 목록을 작성하고 대신 단일 값 목록을 사용하는 것이 좋지 않거나 불가능한 경우는 언제입니까?
여러 값을 반환하고 사용하는 값 및 정의 값과 같은 기능에 대한 설명서를 읽었습니다. 나는 그들이하는 일을 이해한다. 그런 일을하고 싶을 때 내게는 분명하지 않습니다.Scheme에서 (values ...) (define-values ...)을 사용하는 경우
단일 값 목록을 작성하고 대신 단일 값 목록을 사용하는 것이 좋지 않거나 불가능한 경우는 언제입니까?
정의 값은 변수를 표현식의 결과에 직접 바인드 할 수있는 편의를 제공합니다. 명시 적으로 목록의 압축을 풀 필요가 없으므로 타이핑을 절약 할 수 있습니다. 단일 값 목록을 작성하는 것이 좋지 않거나 불가능한 경우가 있다고 생각하지 않습니다. 사실 정의 값보다 더 이식성이 좋습니다.
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))
당 아지즈와 아론의 관점; 대부분의 정보를 독자에게 전달하는 접근 방식을 사용해야합니다.
같은 목록을 사용하면 일치 라이브러리를 사용하여 목록의 구조를 즉시 해제 할 수 있습니다. – grettke
@ grettke 그러나 모든 구성표에 일치 라이브러리가있는 것은 아닙니다. ( –
@Vijay : 동의합니다. 휴대용 검색 라이브러리가 있습니다. – grettke