タグ

Rubyとambに関するkeyesberryのブックマーク (5)

  • 継続でバックトラックを 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 - 非決定性 非決定的アルゴリズムはある意味では超自然的な予見に基づいて動作するものだ.超能力を持ったコンピュータに触れることのない私達に,どうしてそんなものが必要なのだろうか?\ それは非決定的アルゴリズムを決定的アルゴリズムでシミュレートできるからだ.純粋に関数的なプログラム ---すなわち副作用の一切ないもの--- では,非決定性は特に直截的になる.純粋に関数的なプログラ

  • 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