タグ

rubyとscriptingに関するyouzのブックマーク (16)

  • Rubyist Magazine 0022号 - RubyKaigi2007: C より速い Ruby プログラム:

    『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、日 Ruby の会の有志による Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0058 号 バックナンバー Rubyist Magazine 0058 号 RubyKaigi 2018 直前特集号 Rubyist Magazine 0057 号 RubyKaigi 2017 直前特集号 Rubyist Magazine 0056 号 Rubyist Magazine 0055 号 Rubyist Magazine 0054 号 東京 Ruby 会議 11 直

  • 関数を返す関数っていつ使うの - 趣味的にっき

    Route 477(2008-01-10) 釈迦に説法のような気もしますが、力尽きていらっしゃるようなので。 まず普通にstring_ltを実装してみます。で、これの文字列の比較部分だけを変更して、その他の部分を共有する方法について考えてみます。 def string_lt(*strs) (1 ... strs.size).each do |i| return false unless strs[i - 1] < strs[i] end true end p string_lt('a', 'b', 'c') # => true Rubyではブロックを使ってそのメソッドに特化の部分をメソッド外部から与えることができます。個人的にはこれが一番Rubyらしいアプローチだと思います。 def string_comparer(*strs, &test) (1 ... strs.size).each

    関数を返す関数っていつ使うの - 趣味的にっき
    youz
    youz 2008/10/01
    Rubyで高階関数
  • 「Perl, Python, Ruby の比較」があまりにもいい加減な件 - odz buffer

    ref:Perl, Python, Ruby の比較 ref:はてなブックマーク - Perl, Python, Ruby の比較 ref:はてなブックマーク - Perl, Python, Ruby の比較 ちょっと遅くなったが以前宣言したとおり、書いておく。 「Perl, Python, Ruby の比較」はどうも調査が足りないのか、結果的にかなり嘘のまじった文章になっている。あくまで、初心者の私見ですので気軽に聞き流してください。とはあるものの、はてブのコメント等で「参考になる」とか言っている人もいる*1ので一応指摘しておこうと思う。 3.2 次に Python 変数はデフォルトで局所変数となるので、 Perl のように my で宣言する必要はありません。 my を強制することで変数の typo を防げるという視点が抜けるのは若干フェアではないですね。 それから、Python には

    「Perl, Python, Ruby の比較」があまりにもいい加減な件 - odz buffer
  • ミニパターン集

    $Id: minipattern.rd,v 1.8 2003/07/29 15:55:24 aamine Exp $ いかにも Ruby 特有ぽいものを中心に小技をあつめました。 Cookbook なんかと違うのは、具体的な課題を解決する方法ではなく 言語上のパターンにしぼったこと。 インスタンス変数の遅延初期化 初期化されているかどうかわからない インスタンス変数を初期化するときは ||= を使う。 @ivar ||= "" # @ivar が既に非 nil ならばそのまま、nil なら "" を代入 1.6.2 まではこう書くと初期化されていない場合に警告が出ていたのだが、 1.6.3 からは ||= を使う場合に限り警告が出なくなった。 Mix-in のメソッド中での初期化などに便利である。 コンテナの遅延初期化 例えば配列のハッシュを作るとき、ハッシュのキーになにが来るか わからな

  • なんでもquine : 404 Blog Not Found

    2006年04月08日17:07 カテゴリArt書評/画評/品評 なんでもquine とっても自己言及したくなったのでTB. Gödel, Escher, Bach Douglas R. Hofstadter [邦訳: ゲーデル、エッシャー、バッハ] rubyco(るびこ)の日記 - 自己言及とても眠いので自己言及プログラムを書きました。以下の一行をPerl Scriptに入れると、どんなものでも自己言及プログラム = quineになります。 open ME, $0 and print <ME>; こうしてもOK. print <ME> if open ME, $0; さらに暗黒面に進みたい人は、これも。 open 0 and print <0>; これが気に入った人はAcme::Bleachも気に入ることでしょう。 もちろん、Rubyだって出来ます。 File.open($0).read

    なんでもquine : 404 Blog Not Found
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • :CodeZine(コードジン)

  • ちょー簡略版unlambda - 趣味的にっき

    このところSKIコンビネータで遊んでいたのですが、そういえばSKIコンビネータをベースとしたunlambdaって関数型言語があったなぁ思い出しました。ということでちょー簡略版のunlambdaを実装してみました。組込み関数は.x、r、i、k、sのみ実装しています。 require 'stringio' def nlambda(n = -1, xs = [], &f) n = f.arity if n < 0 if n == 0 f[*xs] else lambda {|x| nlambda(n - 1, xs + [x], &f) } end end FUNC_TBL = Hash.new {|h, c| c.chr.to_sym } FUNC_TBL[?.] = nlambda {|x, y | putc x; y } FUNC_TBL[?r] = nlambda {|x | puts;

    ちょー簡略版unlambda - 趣味的にっき
  • Route 477(2008-03-03)

    ■ [biwascheme] wait-forを使って、イベント処理も同期的に書けるようにした http-requestでAjaxを同期的に書けるようにしたのに続き、 ボタンのクリック等も同期的に書けるようにしてみた。 例 (begin (print 1) (wait-for ($ "foo") "click") (print 2)) <input id="foo" type="button" value="click to proceed"> これを実行すると、まず1が表示され、ボタンが押されたあとに2が表示される。 やってることは単純で、wait-forが呼ばれたときにインタプリタの状態を保存し、 ボタンが押されたときに再開するというだけ(あと、2回実行されないように、stopObervingも行う) だけど、実際動いてみるとインパクトあるわ。 以下wait-forのソース。 defi

    Route 477(2008-03-03)
  • Rubyでもカリー化 - 趣味的にっき

    関数型言語ラブな人は、Rubyでもカリー化したくなってくると思います(特にHaskellラブな人はその傾向が強いように思います)。ということで、こんなメソッドを書いてみました。 module Kernel def curry(sym, *a1) f = sym.respond_to?(:call) ? sym : method(sym) lambda do |*a2| f.call(*(a1 + a2)) end end end 使い方はこんな感じです。mapの例を見てください。あぁ何て美しいのでしょう。 def add(a, b) a + b end p curry(:add, 2)[3] # => 5 p curry(method(:add), 2)[3] # => 5 p curry(lambda {|a, b| a * b}, 2)[3] # => 6 p (1 .. 10).ma

    Rubyでもカリー化 - 趣味的にっき
  • palindromic quine - まめめも

    回文になっている quine です。以下のように動けば正解です。 $ ruby pquine.rb > pquine2.rb $ diff pquine.rb pquine2.rb $ ruby -e 's = File.read("pquine.rb"); p(s == s.reverse)' true 以下は僕の考えた解答。 どれも改行コードは LF で、ファイル末尾に改行をつけないで実行してください。 まずはインチキ。 DATA.rewind $> << DATA.read __END__ __DNE__ daer.ATAD << >$ dniwer.ATAD 一行コメントを使うとわりと簡単。 eval s="$><<\"eval s=\#{t=s.inspect}#\"+(s[5,7]+t).reverse"#"esrever.)t+]7,5[s(+"\#}tcepsni.s=t{

    palindromic quine - まめめも
    youz
    youz 2008/10/01
    回文quine。おもしれー。すげー。
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • Perl のリスト操作を Ruby 風に - naoyaのはてなダイアリー

    Perl の言語組み込みのリスト操作は関数形式で、push(@array, 1, 2) のような記述になります。一つのリストに対して複数の操作をしたい場合などは、関数呼び出しを複数行にわたって書いていくことになり、少々面倒です。しかし Perl は、Perl のリスト実装である配列のリファレンスに bless してメソッドを定義したクラスを作ることができます。この独自に定義したクラスにプリミティブな操作を加えていって、Ruby のように連続したメソッドの呼び出しによるリスト操作を実現することが可能です。 ここでは List::RubyLike という配列クラスを作成します。まずは手始めに配列に bless して、size() メソッドが呼び出せるようにします。以下のようになります。 package List::RubyLike; use strict; use warnings; sub

    Perl のリスト操作を Ruby 風に - naoyaのはてなダイアリー
  • 名前付き無名関数 - 趣味的にっき

    lambdaを生成する関数を多用すると、pで出力したlambdaが一体何をするlambdaなのかわかりにくくなる場合があります(通常lambdaをinspectするとファイル名と行番号は表示されるのですが、lambdaを生成する関数経由で生成すると同じファイル名、行番号になってしまいます)。 で、これを何とかしたいなぁと思って、以下のようにlambdaを置き換える関数を定義してみました。 module Kernel alias __lambda__ lambda def lambda(name = nil, &block) f = __lambda__(&block) if name f.instance_variable_set(:@name, name) def f.inspect super.chop + " @name=#{@name.inspect}>" end end f en

    名前付き無名関数 - 趣味的にっき
    youz
    youz 2008/10/01
    無名関数に名前をつける
  • 記号だけで brainfuck インタプリタ - まめめも

    Ruby 1.9 の新機能のひとつに「lambda { ... } を -> { ... } と書ける」というのがあります。この表記は反対意見が根強い *1 ですが、確実にすばらしい点があって、全部記号だということです。これによって Ruby が記号だけでチューリング完全になります *2 。 デモとして、brainfuck インタプリタを記号だけで書いてみました。 $___,@_,@__,$_=(@@__="")=~//,?#=~/$/,->(_){_<(__="####"=~/$/)**__&&(@@__<< _;@__[_+@_])},[*$<]*@@__;@__[$___];$____,$_,@___,$__,@__=$_[@_+($_+?!=~/!/ )..-@_],$`,[],[],->(_){(__=$_[_];__=~/[><+\-\.,]/?$__<<$_[_]:__==?

    記号だけで brainfuck インタプリタ - まめめも
  • 1