タグ

ambに関するkeyesberryのブックマーク (8)

  • 継続でバックトラックを Ruby で - Tociyuki::Diary

    年度末になると忙しくなる人種に巻き込まれてしまい、RubyPerl を使って遊ぶのは数週間ぶりのことです。中断していた作業をチェックアウトして眺めていたのですが、どうも気分が乗らないので、リハビリを兼ねて LispUser.net : 継続でバックトラック の scheme のバックトラックの例題を Ruby に直訳してみました。 if 文の条件式を満たす x、y、z の組み合わせを探す問題です。探索範囲は 0 から 100 の整数。それぞれの値で条件が成り立つかどうかをチェックし、成り立たないときは、fail 関数を呼ぶことでバックトラックを生じさせて、次の数値のチェックを続けます。 require 'trial' def solve x = Trial.in_range(0, 100) y = Trial.in_range(0, 100) z = Trial.in_range(0

    継続でバックトラックを Ruby で - Tociyuki::Diary
  • 番外編 非決定性 - お気楽 Ruby プログラミング入門

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • On Lisp「22章 非決定性」をRubyで試してみる:TKMR.blog.show

    "On Lisp―Advanced Techniques for Common Lisp" (Paul Graham) を読んだ。 ・Lispの基礎から、マクロ、遅延評価、Schemeと継続、継続をCommonLispで実装して、継続を使った非決定的アルゴリズムの実装、Prolog 初めて関数型プログラミング、というかLispを勉強した身にとっては全編興味深い、特に22章の「非決定性」が面白かった。 On Lisp - 非決定性 非決定的アルゴリズムはある意味では超自然的な予見に基づいて動作するものだ.超能力を持ったコンピュータに触れることのない私達に,どうしてそんなものが必要なのだろうか?\ それは非決定的アルゴリズムを決定的アルゴリズムでシミュレートできるからだ.純粋に関数的なプログラム ---すなわち副作用の一切ないもの--- では,非決定性は特に直截的になる.純粋に関数的なプログラ

  • 独習 Scheme 三週間 Teach Yourself Scheme in Fixnum Days

    非決定性 McCarthy の非決定性オペレータ amb [cite{jmc:amb}, cite{wc:amb}, cite{zmc:amb}] は Lisp 自身と同じくらい古いものですが、Lisp にはありません。amb は 0個あるいはそれ以上の式を引数としてとり、それらの、非決定的な (あるいは「あいまいな」)な選択を作ります。プログラムを意味のあるものに 収束させるこれらの選択を好んでつかいます。ここで、 曖昧選択の深さ優先選択をつかい、他の選択肢を探索するための バックトラックに Scheme の制御オペレータ call/cc を使う amb の Scheme への埋め込みについて検討しましょう。 結果は、拡張言語にたよることなく、Scheme で直接書けるような 探索問題の分野で使用できるエレガントなバックトラッキング戦略が できあがります。この埋め込みは Prolog

  • Scheme 入門 18. 非決定性

    1. 初めに 非決定性は問題を記述するだけで答えが得られるようにするアルゴリズムです。 プログラムは選択肢の中から条件に合うものを自動的に選び出します。 この手法を使うと論理プログラムを容易に書くことができます。 例えば、 > (let ((i (amb 4 6 7)) (j (amb 5 8 11))) (if (prime? (+ i j)) (list i j) (amb))) (6 5) のようにすると '(4 6 7) と '(5 8 11) のうちから二つの数の和が素数になる組の1つを返します。 (amb 4 6 7) は、式が値を返すように 4, 6, 7 の中から適切に値を選び、同様に、 (amb 5 8 11) は、式が値を返すように 5, 8, 11 の中から適切に値を選びます。 (amb) は選ぶべき値が無いので失敗を表します。 実際は、amb は深さ優先の探索をして

  • On Lisp --- 非決定性

    プログラミング言語を使うことで,膨大な量の詳細に飲み込まれないで済んでいる. Lispがよいプログラミング言語なのは,それ自身が多くの詳細を扱ってくれて, プログラマが耐えられる複雑さの限界を有効に使わせてくれている. この章ではマクロでLispにさらに別の種類の詳細を扱わせる方法を示す. 非決定的なアルゴリズムを決定的なものに変換することの詳細だ. この章は5つの部分に分けられる. まず,非決定性とは何かを説明する. 次に,非決定的なchooseとfailを継続を使ってSchemeで実装する. 3番目では,第20章の継続渡しマクロを基礎にCommon Lispで実装したchooseとfailを示す. 4番目では,オペレータcutをPrologとは独立に理解する方法を示す. 最後に,非決定的オペレータの改良について考察する. この章で定義される非決定的な選択オペレータは, 第23章のATN

  • Rubyで非決定性計算 - 趣味的にっき

    以前ここで有名なBaker, Cooper…の非決定性計算をRubyで解いてみました。コードはこんな感じです。 #!/usr/bin/env ruby module Enumerable def distinct? table = {} each do |e| return false if table[e] table[e] = true end return true end end solve = [] [1, 2, 3, 4, 5].each do |baker| [1, 2, 3, 4, 5].each do |cooper| [1, 2, 3, 4, 5].each do |fletcher| [1, 2, 3, 4, 5].each do |miller| [1, 2, 3, 4, 5].each do |smith| next unless [baker, cooper,

    Rubyで非決定性計算 - 趣味的にっき
  • 関西オープンソース2005発表, 非決定性計算, KOF宴会 - Journal InTime(2005-10-29)

    _ 関西オープンソース2005発表 発表してきた。 スライド ちょっと会場入りが遅れたせいもあり、進行がぐだぐだになってしまって、 申し訳なかったです。 Tags: ximapd Rast _ 非決定性計算 今回いちばん面白かったのが、Haskell同好会のセッション。 吉田さんのプレゼンで非決定性計算の話が出て来たのだが、 Wikiでも紹介されていたようだ。 「他の言語じゃこんなことできないでしょ」という話だったが、 実はRubyConf2005のChad FowlerとJim Weirichのチュートリアルでも同じようなデモをやっていた。 それを使って書くと、 require "amb" A = Amb.new baker = A.choose(1, 2, 3, 4, 5) cooper = A.choose(1, 2, 3, 4, 5) fletcher = A.choose(1,

  • 1