c.l.sで興味深い議論が進行していたのでメモ。 purely functional Lisp + call/cc = ? 発端は、Nils M Holmの 「Purely functionalなマイLispにcall/ccをつけてみたよ」 という投稿。 それに対し、Schemeの大御所達から 「call/ccは、副作用を生じるよ」 と突っ込みが入る。 言い替えれば、「set!などの明示的な副作用オペレータを一切持たない purely functionalなLispに、call/ccを導入すると、それはもはや purely functionalではなくなる」ということ。 実例 これは簡単な例によって示すことができる。szgygによる例: (let ((f (lambda (x) (call/cc (lambda (k) k))))) (cons (f 0) (f 0))) (f 0)の2回
![Scheme:call/ccと副作用](https://cdn-ak-scissors.b.st-hatena.com/image/square/53a987f8da95ff3323da15345495ff0ac5db3cf3/height=288;version=1;width=512/https%3A%2F%2Fpractical-scheme.net%2Fwiliki%2Fthumbnail-placeholder.png)