Когда использовать (значения) (определить значения) в схеме

Я прочитал документацию по таким функциям, как значения и определения значений, которые возвращают и используют несколько значений. Я понимаю, что они делают. Мне не ясно, когда вы захотите использовать такую ​​​​вещь.

Когда было бы плохо/невозможно создать единый список значений и вместо этого использовать этот единственный список значений?


person z5h    schedule 06.11.2009    source источник


Ответы (2)


define-values — это удобство, позволяющее напрямую привязывать переменные к результатам выражения. Это избавляет вас от набора текста, поскольку вам не нужно явно распаковывать список. Я не думаю, что бывают ситуации, когда плохо или невозможно построить единый список значений. На самом деле, это будет более переносимо, чем define-values.

person Vijay Mathew    schedule 06.11.2009
comment
Когда вы используете такие списки, вы, вероятно, немедленно деструктурируете их с помощью библиотеки совпадений. - person grettke; 06.11.2009
comment
@grettke Но не во всех схемах есть библиотека совпадений :( - person Vijay Mathew; 06.11.2009
comment
@ Виджай: Согласен. Однако существуют портативные библиотеки совпадений. - person grettke; 06.11.2009

Вот мой оригинальный пост на эту тему; он скопирован ниже.

В этой ветке в comp.lang.scheme обсуждаются средства возврата нескольких значений. По-видимому, в R6RS есть 3 решения:

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

По мнению Азиза и Аарона; вы должны использовать подход, который передает больше всего информации читателю.

person grettke    schedule 06.11.2009