アカウント名:
パスワード:
-- cooper
うっかりcall-with-multi-valuesなんて名前にしちゃったが、引数の順序がcall-with-valuesとは違っている(意味的には逆になっている)から、別の名前にした方がいいんだよね。apply-multi-valuesとかも考えてみたけど、値に相当する部分にも手続きを渡すのがちょっとなぁ...
# というか、慣れないせいかもしれないけど、Schemeの多値って使いにくい
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
マクロは良くわからないので (スコア:1)
(use srfi-11)
(define (main args)
(let-values ((a (values 1 2 3))
(b (values 4 5 6)))
(display (append a b))
(newline)))
効率的な例は、他の人に期待 ;-)
-- cooper
ちょっとやってみた (スコア:1)
(define (pa$-with-multi-values proc mv-proc-list)
(letrec-syntax
((pa$-with-values
(syntax-rules ()
((_ proc producer)
(call-with-values (lambda () producer) (lambda args (apply pa$ proc args)))))))
(if (null? mv-proc-list)
proc
(pa$-with-multi-values (pa$-with-values proc ((car mv-proc-list)))
(cdr mv-proc-list)))))
(define-syntax call-with-multi-values
(syntax-rules ()
((_ consumer producer ...)
(call-with-values (pa$-with-multi-values values (list producer ...)) consumer))))
(define (main args)
(display (call-with-multi-values vector
(lambda () (values 1 2 3))
(lambda () (values 4 5 ))
(lambda () 6)))
(newline))
;;; なーんかエレガントにいかんのよねぇ。
;;; 結局、applyするとこでlist作ってるし。
Re:ちょっとやってみた (スコア:1)
うっかりcall-with-multi-valuesなんて名前にしちゃったが、引数の順序がcall-with-valuesとは違っている(意味的には逆になっている)から、別の名前にした方がいいんだよね。apply-multi-valuesとかも考えてみたけど、値に相当する部分にも手続きを渡すのがちょっとなぁ...
# というか、慣れないせいかもしれないけど、Schemeの多値って使いにくい