タグ

ブックマーク / bleis-tift.hatenablog.com (10)

  • 再帰関数のスタックオーバーフローを倒す話 その2.5 - ぐるぐる~

    連載目次 再帰関数のスタックオーバーフローを倒す話 その1 CPSとCPS変換の話 再帰関数のスタックオーバーフローを倒す話 その1.5 F#での「末尾」についての話 再帰関数のスタックオーバーフローを倒す話 その2 .NETにおける末尾最適化の方法についての話 再帰関数のスタックオーバーフローを倒す話 その2.5 ← 今回 継続モナドと、F#の残念さの話 再帰関数のスタックオーバーフローを倒す話 その3 すべてをあきらめて再帰をwhileに書き直す方法の話 はじめに 再帰関数のスタックオーバーフローを倒す話 その1ではCPS変換について、 再帰関数のスタックオーバーフローを倒す話 その1.5では末尾呼び出しについて、 再帰関数のスタックオーバーフローを倒す話 その2では2種類の末尾呼び出しの最適化について話しました。 今回は、継続渡しスタイルがつらい人*1をモナドで救う話をします。 最初

    再帰関数のスタックオーバーフローを倒す話 その2.5 - ぐるぐる~
    advblog
    advblog 2015/04/24
  • なごやかJavaで発表してきた - ぐるぐる~

    .NET系開発者から見たJava from bleis tift なごやかJava第一回で、「.NET系開発者から見たJava」というタイトルで発表してきました。 Javaのこの機能って.NET開発者から見てどうなの?というような内容です。 大阪から参加してくれた方の感想を載せておきます。 おかしい、終わった後の感想が「F# すごい!」だ…… #ngojava— irof@Javarista (@irof) 2014, 11月 30

    なごやかJavaで発表してきた - ぐるぐる~
    advblog
    advblog 2014/12/01
  • Ruby嫌いがアンダースタンディングコンピュテーションを読んで - ぐるぐる~

    アンダースタンディング コンピュテーション―単純な機械から不可能なプログラムまで 作者: Tom Stuart,笹田耕一(監訳),笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型この商品を含むブログ (2件) を見る 一番最初にはっきりさせておきますが、Rubyは嫌いな言語です。 が、このRubyが嫌いな自分でもいいだと言える*1でした。 自分が対象読者に入っているかどうかは実際に読んでみるまで微妙かな、と思っていましたが、とても楽しめました。 以下、書評です。 Rubyという選択 説明用のコードとして書はRubyを使っていますが、 これに関してはその理由が1章にあります。 私はその明瞭さと柔軟さに魅かれてRubyを選びました また、続けて 書にはRuby独自の機能に依存しているところはありません。 そのため、もしあなたにとってわか

    Ruby嫌いがアンダースタンディングコンピュテーションを読んで - ぐるぐる~
    advblog
    advblog 2014/09/21
  • 「変数に型がないということの利点について考える」の問題について考える - ぐるぐる~

    id:perlcodesample さんの 変数に型がないということの利点について考える - サンプルコードによるPerl入門 から。 ううむ。 けれども、型がないということは、当に素晴らしいことです。 型がないことによって、たくさんの面倒から解放されるからです。 冒頭のこれが、「静的型付き言語にはメリットが(ほとんど)ない」と言っているように思えてしまいます。 コメントのやり取りを見ても、ある程度そう考えているように受け取れます。 勘違いなどが多く見られたので、補足というか、反論というか、そんな感じのことを書きます。 追記: ごく一部、このエントリを「動的型付き言語と静的型付き言語を比べて、静的型付き言語の方が素晴らしい言語である」ということを言うためのものだと勘違いしている人を見かけました。 このエントリは、そこについては言及していません。 あくまで、元記事で「動的型付き言語のメリッ

    「変数に型がないということの利点について考える」の問題について考える - ぐるぐる~
    advblog
    advblog 2013/02/28
  • JSX の進化速度が半端ない - ぐるぐる~

    気に入らない所を直して pull request 投げたら、取り入れられたので、8 日前に書いたエントリが過去のものとなっちゃいました。 関数型 以前の JSX では、関数型は function(: int): string のように書く必要がありました。 これはこれでそのまま使えるのですが、新たに (int) -> string という形式にも対応しました。 ちなみに、複数引数はカンマ区切りで (int, boolean) -> string のようになります。 カリー化された関数は、 function(: int): function(: number): string の代わりに (int) -> (number) -> string と書けます。 引数を囲むカッコは、(今のところ) 省略不可能です。 これには 2 つの理由があります。 この機能を追加したとき、JSX のパーサの能力

    JSX の進化速度が半端ない - ぐるぐる~
    advblog
    advblog 2012/06/12
  • JSX のアレな所 - ぐるぐる~

    注意!このエントリは既に古いので、JSX の進化速度が半端ない - ぐるぐる〜もあわせて読んでください。最新のコードを参照するのが手っ取り早いです。 JSX なる言語がリリースされました。 この言語が謳っているのが、 高速 安全 簡単(生産性が高い、とも) という 3 点です。 高速と安全はまぁいいでしょう*1。 問題は、はたしてこの言語は簡単なのか?という点です。 簡単かどうかは人によるのでアレなのですが、まぁ一部の人にとっては簡単とは言えない (というか書く気がしない) 書き方を強制されるのです。 関数型 数値を受け取って文字列を返す関数を表す型は、JSX では以下のように書きます。 function(:number):string これ単体で見ると分かりやすそうな気配はします。 では、これ読めますか? function f(g: function(:number):number):

    advblog
    advblog 2012/06/04
  • Git と GitHub を体験しながら身につける勉強会行ってきた - 予定は未定Blog版

    9/18(土) 15:30~ GitGitHubを体験しながら身につける勉強会(名古屋) : ATND 行ってきました。 なんかいろいろと話すことになったんですけど、あの場で言いそびれたこととか、もっとこう説明してればよかったなぁ、って部分の補足も兼ねたエントリです。 長文注意。 ショートカット git add の話 git add -p/git reset -p の話 リビジョン番号がない話 ブランチの話 git-completion の話、__git_ps1 の話 コミットの指定の話 reset の話 rebase と merge の話 公開したものの rebase の話 stash の話 TortoiseGit、HG、SVNのはなし 全体を通して git add の話 Git と SVN では、add に限らず、同じ名前のサブコマンドでも意味が異なるものがいくつかあります。 その中

    Git と GitHub を体験しながら身につける勉強会行ってきた - 予定は未定Blog版
  • 名古屋 Scala 勉強会に参加してきた! - ぐるぐる~

    こういうのに参加しないといつまで経っても Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala) 作者: Martin Odersky,Lex Spoon、Bill Venners,羽生田栄一,長尾高弘出版社/メーカー: インプレスジャパン発売日: 2009/08/21メディア: 単行購入: 17人 クリック: 637回この商品を含むブログ (120件) を見る を読み始めないと思って・・・ 今回はなんと! 33 章中 1 章すら終らなかった*1という・・・ まぁ、1 章は文章ばっかだったので、もうちょっと進めば表とかコードとかいっぱい出てくるからスピードも速くなる!はず! 以下なんかごった煮。眠いので超適当。 trait Ruby の Module と同じような物で、Mixin して使う。 trait って名前は C++ の ty

    名古屋 Scala 勉強会に参加してきた! - ぐるぐる~
  • プログラミングのセオリー - ぐるぐる~

    プログラミングのセオリー 作者: 矢沢久雄出版社/メーカー: 技術評論社発売日: 2008/10/04メディア: 単行(ソフトカバー)購入: 1人 クリック: 138回この商品を含むブログ (42件) を見る 矢沢さんはオブジェクト指向周りでおかしな部分が多いので、Chapter7から読んでみた。 なんというか、期待を裏切らない人だw いろいろと書いてたんだけど、一番あり得ない部分が埋もれてしまったんで、ばっさり削除して大事なところだけ。 「多態性を実現したコード」として、以下のコードを紹介している。 public class Animal { private String voice; public void nake() { System.out.println(this.voice); } public Animal(String voice) { this.voice = voi

    プログラミングのセオリー - ぐるぐる~
    advblog
    advblog 2009/02/01
  • Subversionの理解されてなさも異常 - ぐるぐる~

    VSSとSubversionが思想とか仕組みレベルで同じものだと勘違いされてることが多い。 VSSはその仕組み上、ファイルサーバにリポジトリを置いておいても問題にならないけど、Subversionでは問題大有り。 Subversionのリポジトリは一種のファイルサーバのようなもので、ファイルサーバ上にリポジトリを置くということは、ファイルサーバ上にファイルサーバを構築しているようなもの。 そういう「考え方がおかしい」というところは見ないとしても、ファイルサーバにリポジトリを置くと、リポジトリ操作のためのコマンドがクライアント側で行われる、といった問題点もある。 これのせいで、どのマシンにもインストールされているであろうもの*1を使ってしかフックスクリプトが書けなくなってしまう。 コミットログが記述されてなければコミットを失敗させるのにも一苦労だ*2。 フックスクリプトを書いたはいいけど、フ

    Subversionの理解されてなさも異常 - ぐるぐる~
  • 1