タグ

Programmingとcontinuationに関するjjzakのブックマーク (27)

  • JavaScript の継続(continuation)によるループ

    ちょっと試してみました。JavaScript の処理系は Rhino(Rhino 1.7 release 2 2009 03 22) です。 Continuation を使って sum を定義してみました。 function callcc (f){ return f(new Continuation()); } function identity (x){ return x; } function sum (n){ var i = 0; var total = 0; var hop = new Continuation(); var next = callcc(identity); if (n < i){ hop(total); } else { total += i; ++i; next(next); } } sum(10); // -> 55 loop 関数にしてみました。loop 関

    JavaScript の継続(continuation)によるループ
  • Shibuya.js: ActionScript でクロージャ、継続渡し : torus solutions!

    Shibuya.js Technical Talk #2 で、 発表をさせていただきました。ありがとうございました。 5 分の中にいろいろ詰め込もうとしたら、 訳の分からない発表になってしまいました。 発表者やスタッフのみなさんお疲れさまでしたー。 今回の発表では、 まず ActionScript(JavaScript)でのクロージャと継続渡しスタイルの実装方法の説明をし、 その後、 A* アルゴリズムというグラフの最短経路探索アルゴリズムを例にとって、 クロージャや継続渡しスタイルの便利さをアピールしようとしました。 発表資料 当日使った発表資料をおいておきます。 スライドの PDF デモの Flash(SWF) デモの ActionScript ソース Flash 8 を持っていれば、次の Fla ファイルを使ってデモを試すことが出来ます。 (Flash 8 の体験版 でも OK です

  • 継続渡しスタイル(CPS)と非同期構文(async/await) | matarillo.com

    2020-03-31 09:37:20 Eric LippertのBlog “Fabulous Adventures In Coding” に、非同期構文に関する連載記事が投稿されていたので、少しずつ訳してみる。 継続渡しスタイル(Continuation Passing Style)再訪 パート1 パート2: 制御フローは大雑把に パート3: コルーチンは慎重に パート4: 自身をひっくり返す パート5: CPSと非同期 C# 5の非同期 パート1 パート2: awaitはどこから? パート3: 複合 パート4: 魔法じゃない パート5: タスク大杉 パート6: asyncはいずこへ? パート7: 例外 パート8: もっと例外

  • Tumblr

  • よくわかるcall/cc

    内容に直接関係しないのですが、「スタックのコールバック」。@aharisuさんが言っていたのはたぶん「コールスタックの破棄」的なことだったかと。コールスタックごと吹き飛ばす的な。違ったかな。 継続 - Wikipedia 「ある時点での状態」を変数に束縛して、後からそこへ戻るといったことも可能になる。Schemeの継続は関数の形をとっており、これは「その関数を呼ぶことにより、そこに渡された引数をcall/ccで囲まれている式全体の値として継続に“注入”できる」と定義されている。継続 プログラムの実行順序を制御する概念継続 既に終了したスタックフレームを黄泉の国か ら引きずり出してスタックにぶちこめるわけである。普通の人間が「おっ、ここはCall/CCを使えば カッコ良く実装できるね!」などと思いついたりすることはまずありえないScheme/継続 - Wikibooks 継続を用いれば大域脱

  • Tumblr

    Tumblr is a place to express yourself, discover yourself, and bond over the stuff you love. It's where your interests connect you with your people.

  • Yコンビネータ 継続編

    2022 (2) ► 10月 (1) ► 2月 (1) ► 2021 (51) ► 11月 (2) ► 10月 (2) ► 9月 (4) ► 8月 (4) ► 7月 (4) ► 6月 (4) ► 5月 (3) ► 4月 (10) ► 3月 (7) ► 2月 (4) ► 1月 (7) ► 2020 (155) ► 12月 (7) ► 11月 (10) ► 10月 (8) ► 9月 (8) ► 8月 (11) ► 7月 (21) ► 6月 (19) ► 5月 (14) ► 4月 (20) ► 3月 (13) ► 2月 (10) ► 1月 (14) ► 2019 (293) ► 12月 (11) ► 11月 (12) ► 10月 (24) ► 9月 (29) ► 8月 (27) ► 7月 (36) ► 6月 (40) ► 5月 (24) ► 4月 (35) ► 3月 (42) ► 2月 (6

    Yコンビネータ 継続編
  • 継続渡し形式(CPS)Javascriptプログラミング

    継続とはコンピュータがプログラムを実行しているときの次に何をするのかを表す概念です。詳しくは何でも継続のページを参照し欲しいのですが、継続はプログラムを実行する上で欠かせない存在となっています。ソースコードのある行を実行したら次の行を実行します。関数(サブルーチン)を終了したら、呼び出し元に戻ります。これらは全て継続です。あたりまえと言えばあたりまえのことです。しかし、このあたり前のことを明確に意識しようとすると途端に目の前に霞がかかったようになります。 プログラミングの世界の概念には、禅の公案のようなものがある。それを説明する文章はほんの一文なのに、最初に目にする時、その文は全く意味をなさない、暗号のように感じられる。だがひとたびその概念を理解すると、その概念の説明は確かにその一文で説明されているのがわかるのだ。 そんな、「分かれば分かる」という禅問答の中でも「継続」は最も謎めいたもの

  • ネタ記録庫/継続 - ocaml-nagoya

    何ができるの? † 大域脱出 例外処理 非決定性 wiliki:amb 例えば、 (let ((i (amb 4 6 7)) (j (amb 5 8 11))) (if (prime? (+ i j)) (list i j) (amb))) ;Value 23: (6 5) のようにすると '(4 6 7) と '(5 8 11) のうちから二つの数の和が素数になる組の1つを返します。 これを理解するのに、自分は3ヶ月かかりました。 ambは、バックトラック演算子です。動きを大雑把に言うと、 (let (i (amb 4 6 7))で、 i に 4 が入ると同時に、 この時点のツヅキ、 "6 7)) (j (amb 5 8 11))) (if (prime? (+ i j)) (list i j) (amb)))" を取り出して、スタックにpush。 次の行、 (j (amb 5 8 1

  • 本を読む FizzBuzzとGaucheで学ぶ継続の基礎

    先日は酔った勢いで「FizzBuzzとGaucheで学ぶ遅延評価の基礎の基礎」ってエントリを書いてみました。今回は、再び酔った勢いで、同じネタから継続渡しスタイル(CPS:Continuation Passing Style)に挑戦してみます。 言語は今回もSceme(Gauche)です。継続渡しスタイルの知識は、「プログラミングGauche」と「まるごとJavaScript&Ajax!」の受け売り(劣化コピー)ですので、勘違いがあったらご指摘ください。 遅延評価と継続渡しの比較 遅延評価編では、無限ループを避けるために遅延評価を使いました。無限ループを避けるための方法としては、ほかに、継続渡しによる呼び出しトランポリンを使った方法があるみたいです。 とてもおおざっぱにいうと、遅延評価は関数型プログラミングで、継続渡しは手続き型プログラミングなんだそうです。 まず手続き型っぽく書いてみる

  • なんでも継続、Perl で。 : torus solutions!

    最近よくコンティニュエーション・パッシングだとか、 継続ベースの○○とか、 そういう話題を耳にします。 でも継続っていうのが何なのか良く分からなかったので、 お正月休みに Shiro Kawaiさんの なんでも継続 を読んでみました。 今までずっと難しいだろうと思って読んでなかったんだけど、 これがまたとても分かりやすくて面白かったので、 途中にあげられていたサンプルコードを Perl でも書いてみました。 普通の再帰形式 Scheme では (define (leaf-count tree) (if (pair? tree) (+ (leaf-count (car tree)) (leaf-count (cdr tree))) 1)) Perl では Perl にはペアがないので、 2 要素の配列でエミュレートすることにします。 それ以外はそのまんまです。 sub leaf_count

  • 反復的プロセス、末尾再帰、継続渡しスタイル : torus solutions!

    はてなリングの SICPで学びましょう というのに参加したので、 SICP に関係しそうなことを書いてみます。 SICP の第 1 章で、 再帰的プロセスの手続きを反復的プロセスに書き換えるという問題が出て来ますが、 これは慣れると自然に出来るようになります。 そこで出てくるのが末尾再帰というテクニックです。 しかし、 場合によっては末尾再帰にするのがちょっと難しい場合があります。 こういう時のとっておきの方法として、 継続渡しスタイルというのを紹介します。 簡単な書き換え 数値からなるリストを受け取って、 その要素の和を返す sum という関数を考えます。 まず、 普通に再帰を使って書くとこんな風になると思います。 (define (sum l) (if (null? l) 0 (+ (car l) (sum (cdr l))))) これを反復的プロセスの関数 sum-iter に書き換

  • Re: CPS を知るのによい参考文献 (Gauche-devel-jp) - Gauche - OSDN

    IRIYA, Kazunori iriya****@mcn***** 2004年 5月 7日 (金) 02:00:50 JST 前の記事 [Gauche-devel-jp] Re: 最後にメッセージを受け取るアクターと手続きの終りの意味 次の記事 [Gauche-devel-jp] Re: [kahua-dev:00648] Re: gauche package repository 計画 記事の並び順: [ 日付 ] [ スレッド ] [ 件名 ] [ 著者 ] みなさん、 さっそくいろいろとポインタ情報をありがとうございました!! WiLiKi に載せる場所がちょっとわからなかったので、とりあえず WiLiKi の書 式で教えていただいた URL をまとめました。そのままコピー&ペーストできま す。 - リファレンス -- [[WiLiKi:Scheme:CPS]] -- [http:

    Re: CPS を知るのによい参考文献 (Gauche-devel-jp) - Gauche - OSDN
  • callcc-lib

    Non trivial examples of Continuation of Ruby co-thread.rb (CoThread: a generic library -- step-wise threading) proc.rb (Proc by Continuantion) co-queue.rb (Queue by Continuation) co-sizedqueue.rb (SizedQueue by Continuation) generator.rb (external iterator, EndOf-type) iterator.rb (external iterator, hasMore?-type) iterator2.rb (external iterator, hasMore?-type, cofork version) sync-eqch.rb (synch

    jjzak
    jjzak 2008/07/04
    Rubyのcallccの(trivialではない)使用例
  • Wormhole: An example of use for callcc - Hello, world! - s21g

    sudo gem sources -a http://gems.github.com 2  sudo gem install genki-wormhole メソッドの内部を実行中に、呼び出し元に一旦処理を戻し、 中断した場所から処理を継続する機能を提供します。 例えば、以下のようなプログラムに対して、 1  require 'rubygems' 2  require 'wormhole' 3 4  def foo 5  puts "foo" 6  Wormhole.throw :foo => 'hello' do |data| 7  puts data[:foo] 8  end 9  puts "bar" 10  end 11 12  Wormhole.catch do 13  foo 14  end.return do |data| 15  puts data[:foo] 16 

  • Weblocks - A Continuations-Based Common Lisp Web Framework

    This page contains basic and probably outdated information about Weblocks. For more details please visit the new web page. You can also check out our demo application to get a first impression. What is Weblocks? Weblocks is a continuations-based web framework written in Common Lisp. Why another web framework? Weblocks uses powerful Lisp features like multiple dispatch, metaobject protocol, lexical

  • Scheme:使いたい人のための継続入門

    使いたい人のための継続入門継続渡し形式call/ccは普通の関数call-with系関数call-with-procedurecall-with-continuation-procedurecall-with-current-continuation評価順序と継続call/ccパズルお手元マルチスレッド部分継続reset/pcとcall/pc環境破壊と部分継続部分継続の使用法PRINT-AND-NEXT-REPL議論質問お手元マルチスレッドのサンプルプログラムについて 使いたい人のための継続入門 とりあえず殴り書き。 くどかったり冗長な文章になってたり、重複してたり、間違ってたり、 おおいなる勘違いをしてたり、恥をカいてたりするかもしれないけどご愛敬。 藁をもつかみたい気持ちで継続を使えるようになりたい人は読んでみてください。 ただし所詮は藁です。(w 継続渡し形式 例によって階乗fact

    Scheme:使いたい人のための継続入門
  • Route 477(2007-06-20)

    ■ [ruby][event] Ruby勉強会@関西-16「30分でわかるcallccの使い方」 先週末のRuby勉強会@関西で、Rubyにおけるcallccの使い方について発表させていただきました。 スライド: pdf ppt 継続の説明については「なんでも継続」がよく参照されるんだけど、 ちょっと説明がボトムアップすぎると思うので(僕も最初に読んだときは全然分からなかった)、「callccで何ができるか」という応用面から攻める 構成にしてみました。 最初は「継続かわいいよ継続」「それをすてるなんてとんでもない」と思ってたんだけど、 いろいろ調べてるうちになんでcallccが嫌われるのかが理解できてしまった。callccはかわいいけど、非常に手のかかる奴らしい。 しかも、面白い利用例はいっぱいあるけど実用的な例があんまりないんだよね^^;。 callccが無くなるとRubyの「かっこよさ

    Route 477(2007-06-20)
  • 継続

    継続、continuationと来ればやはりSchemeの話になるのだろうか。一般社会で schemeと言えば「すきーむ(n)計画。陰謀。」であるがソフトウェア業界で Schemeと言ったらLispの一種のことだ。Lispには変種が腐るほど存在するが、 Common Lispと並んで有名なのがSchemeである。Common Lispが標準化の課程でゴテ ゴテと装備して巨大化したのに対し、Schemeは遥かにコンパクトでクリアな仕 様を持つ。またSchemeとは言語の一般名であり、その実装にはGaucheとか scmとかguileとかMIT Schemeなどがある。 さてCall/CC、正式名称Call with Current Continuation、について 説明しよう。Call/CCはちょっと見はsetjmp/longjmpと同じように見えるのだが、 スタックが深くなる方向にもジャ

  • Cで継続渡し - ヒビノキロク

    できた。試行錯誤している内に無駄に凝った作りになってしまった。ここまで来ると完全に手段が目的と化しているな。 fib.h: #ifndef __FIB_H__ #define __FIB_H__ typedef void (*destructor_t)(); typedef struct object { int ref_count; size_t size; destructor_t destructor; } *object_t; void addRef(object_t obj); void release(object_t obj); object_t newObject(size_t size, destructor_t destructor); void deleteObject(object_t obj); typedef void* (*func_t)(); typedef

    Cで継続渡し - ヒビノキロク
    jjzak
    jjzak 2007/05/11
    Cで継続渡し