タグ

ブックマーク / mametter.hatenablog.com (7)

  • パイプライン演算子の歴史 - まめめも

    (You can read this article in English.) Ruby の開発版にパイプライン演算子(pipeline operator)が試験的に導入されましたが、いろいろあってプチ炎上になっています(チケット)。 せっかくの機会なので、パイプライン演算子の歴史を調べてみました。付け焼き刃の調査なので、間違ってたら教えてください。 パイプライン演算子とは こんな感じのものです。 x |> f |> g |> h # h(g(f(x))) と同じ意味 h(g(f(x))) という関数適用の式は、関数が呼ばれる順序(f→g→h)と、プログラムの字面上の順序(h→g→f)が逆でわかりにくいとされます。この問題は、特に、関数が大きくなったときに顕著になります。 wonderful_process_h( marvelous_process_g( fantastic_process

    パイプライン演算子の歴史 - まめめも
    nisemono_san
    nisemono_san 2019/06/16
    「関数がメインだと、複数適用した場合、右から左に読んでいかないといけなくて、つらみが増す」なので、自然と「左から右に読める」メソッドチェーンとかが主だと、あまりメリットを感じにくいというのがある気が。
  • Quine Tweet: 自分自身へのリンクを持つ再帰的ツイート - まめめも

    This tweet is recursive. https://t.co/bZISaPd3Ts— Quine Tweet (@quine_tweet) 2016年9月19日 「このツイートはありません」となっていますが、URL をクリックすれば自分自身に飛べます。 以下、このツイートが生まれるまでの経緯を長々と書きます。 問題設定 そのツイート自身の URL を埋め込んだツイートを作ります。ツイートの URL はツイートをした後でないと決まらないし、ツイート文面を後から更新する手段はない(と思う)ので、単純ですが意外に難しい問題です。 調査 ご存知のように、現在のツイートの URL は次のような形式です。 https://twitter.com/<username>/status/<id>username はそのままなので、id を事前に予測できれば解決です。*1 調べてみるとこの id

    Quine Tweet: 自分自身へのリンクを持つ再帰的ツイート - まめめも
  • Unlambda インタプリタを書いてみた - まめめも

    西尾泰和さんの最もタメになる「初心者用言語」は Unlambda!を見て、unlambda の初心者になるためにインタプリタを Ruby 1.9 で書いてみました。 d (delay) と入出力がなければとてもシンプル。各命令を定義通りに Proc に変換するだけ。いやあ、-> 記法はキモイですね。いつか慣れるのかな。 require "continuation" def unlambda_subset(s) s = s.split(//) t = ->() do case s.shift when ?`; t[][t[]] when ?s; ->(f){ ->(g){ ->(x){ f[x][g[x]] } } } when ?k; ->(x){ ->(y){ x } } when ?i; ->(x){ x } when ?c; ->(f){ callcc{|c| f[c] } } wh

    Unlambda インタプリタを書いてみた - まめめも
  • 告知:「超絶技巧プログラミング」の本を書いてます - まめめも

    突然ですが告知です。今までこの日記とかで公開してきた奇妙なプログラムを集めて、を書くことになりました。今日はエイプリルフールではありません。 コンセプトは、「実務に役立たないプログラミング」です。誰得?という声が聞こえてきそうですが、手段としてのプログラミングしか知らない人に、一味違うプログラミングの楽しさを知ってもらうきっかけになればいいなとか考えてます。 という建前ですが、内容は完全にアレです。新作を含む30以上のプログラム紹介と、その開発技法の解説をとうとうと語っています。当に誰得なですが、Qlobe とか Merry Quine-mas とか Quine リレーとか ASCII Fluid とか小文字だけ Ruby プログラムとか放射線耐性 Quine とかについて、ネタバレを知りたい人 (誰?) や自分でも書いてみたい人 (誰?) は必読です。 あと、どんな風にネタを考

    告知:「超絶技巧プログラミング」の本を書いてます - まめめも
  • Quine リレー - まめめも

    ref: https://github.com/mame/quine-relay/ 以下は、自分自身を出力する REXX プログラムを出力する Python プログラムを出力する R プログラムを出力する (...略...) を出力する Scala プログラムを出力する Ruby プログラムです。合計 50 言語を使います。 eval$s=%q(eval(%w(B=92.chr;N=10.chr;n=0;e=->(s){s.gsub(/[#{B+B+N}"]/){B+(N==$&??n:$&)}};E=->(s){'("'+e[s]+'")'} ;d=->(s,t=?"){s.gsub(t){t+t}};D=->(s,t=?@){s.gsub(B){t}};Q=->(s,t=?$){s.gsub(t){B+$&}};puts(eval(%q("objectXQRX extendsXApp{

    Quine リレー - まめめも
  • INTERCAL を調べてみた - まめめも

    INTERCAL は 1972 年に登場した難解言語 (esoteric language) の始祖とされる言語です。brainfuck や befunge のような難解言語に興味のある人なら、一度は聞いたことがあると思います。 しかし、INTERCAL について、「元祖難解言語であること」と Hello, world! 以上の詳しいことをわかりやすく説明する資料は見当たりません。マニュアルはなぜかやたら読みにくいので敬遠していたんですが、一念発起して、多少読み書きできる程度まで勉強してみました。元祖の名に恥じない、なかなか頭の悪い言語でした。 変数と定数 16 ビット整数、32 ビット整数、16 ビット整数の配列、32 ビット整数の配列、の 4 種類の型がある。それぞれ . (spot) 、: (twospot) 、, (tail) 、; (hybrid) の記号が与えられている (括弧

    INTERCAL を調べてみた - まめめも
  • あけましておめでとうございます 2012 - なめらかライフゲーム - まめめも

    あけましておめでとうございます。日のプログラマには古来より「正月はフラクタル」という習わしがあります。正月はフラクタルに触れて心穏やかに過ごそうというものです。 というわけで動画を作りました。何かわかるでしょうか。 答えは、ライフゲームのグライダーとブロックの衝突です。セルをそのまま四角で表示するのではなく、アニメーションでなめらかにつないで表示してみました。 グライダー銃 (上) と宇宙船 (下) をグライダーから作る様子。 銀河 (左) とヒキガエル (中央) とパルサー (右) 。かなりきもい。 まあ、ライフゲームはフラクタルかというと違う気がしますが気にしない。一応フラクタルらしいドラゴン曲線も。辰年だし。 実装を簡単にいうと 普通のマスの代わりに電荷みたいなものを配置して、ポテンシャル場を計算する ポテンシャル場に対して marching squares で等高線を描く という

    あけましておめでとうございます 2012 - なめらかライフゲーム - まめめも
    nisemono_san
    nisemono_san 2012/01/02
    かわいい!!……のか?
  • 1