タグ

2011年1月23日のブックマーク (8件)

  • Groovy - Groovy 1.8 release notes

  • SphinxでかんたんePubファイル作成

    警告 この記事は古い為 easy_install の使用等、現在では非推奨の説明があります。インストール周りについては Windowsへのインストールの手順を参照してください。 日時: 2010/05/21 作者: 渋川よしき 最終更新: 2021/02/12 Sphinxの1.0からは、ePubファイルのビルドができるようになります。ePubファイルというのは、iPadやソニーの電子ブックリーダーなどで利用できる、電子ブックのフォーマットです。原理的にはHTMLに、決まった形式のメタデータを含むファイルを追加して、zipで固めて拡張しをepubにしたものですが、Sphinxを使えば簡単に出力することができます。

    SphinxでかんたんePubファイル作成
  • Groovyの動的型変換ではまった - No Programming, No Life

    GroovyはGroovy++などを使わない場合は静的型チェックしてくれず、よしなに動的型変換をしてくれる。(ということを忘れていてはまったのでメモしておこうと思います。) 動作確認: Groovy Version: 1.7.6 JVM: 1.6.0_22 型宣言されてる場合は動的にその型になる def map = [a:1, b:2, c:3] def defMap = map assert java.util.LinkedHashMap == defMap.getClass() String strMap = map assert java.util.LinkedHashMap != strMap.getClass() assert '{a=1, b=2, c=3}' == strMap ということで、受けとる側で型を間違えてるといつのまにか型が変換されちゃっててはまります。 Stri

    Groovyの動的型変換ではまった - No Programming, No Life
  • 第2回 「単一代入」と「末尾再帰」

    しかし,そもそも「関数型言語」とは「副作用のないプログラミングを推奨する言語」のはず。だから,「副作用がある」というと「どこが関数型言語なんだ」と思われるかもしれない。そのOCamlを関数型言語たらしめているポイントの一つが,今回のテーマである「単一代入」だ。 単一代入:変化しない「変数」 Cなどの命令型言語では,変数への代入は,最も重要な機能の一つである。普通のプログラマは,もし「変数に代入をするな」と言われたら,どうやってプログラムを書けばいいのか,途方に暮れてしまうだろう。 しかし,ちょっと複雑なプログラムを開発するようになると,「代入」は意外にやっかいな機能であることがわかってくる。例えば,以下のようなC言語のプログラムがあったとしよう。

    第2回 「単一代入」と「末尾再帰」
    nobusue
    nobusue 2011/01/23
  • ひげぽん OSとか作っちゃうかMona- - 末尾再帰

    最近一部で盛り上がっている「末尾再帰」について自分の理解を確認するのも兼ねて書いてみます。 (そもそも自分がふったのがきっかけっぽいので)。 上級者の方は間違い等に厳しくつっこんでもらえると助かります:-) 背景 自分が末尾再帰を知ったのは多分Schemeの勉強を始めた頃だったと思います。 例えばSICPというでは20ページあたりにこっそりと出てきます。 そのころの理解はかなり浅いもので「ふーん。」程度でした。 さて後日Schemeの処理系を実装することになりR5RSというSchemeの仕様書を読んだところ Scheme の実装は真正に末尾再帰的(properly tail-recursive) であることが要求されている。これは,たとえ繰返し計算が 構文的に再帰的手続きで記述されているときでも,定数空間 でその繰返し計算を実行することを可能にする とあり末尾再帰のことを詳しく知る必要性

    nobusue
    nobusue 2011/01/23
  • Closure#trampoline()とは何か - uehaj's blog

    Closure#trampoline()はGroovy 1.8の新機能の1つです。 何かっていうと、「明示的な末尾再帰の指定*1」を行うためのものです。これを使うと実際には再帰じゃなくなります。ループになります。スタックを消費しなくなります。 だから正確に言うと、「いっけん再帰呼び出しの様に見えるループ」の指定です。ただ、「再帰呼び出しのように見える」というのも疑わしい話ですが。見えますか? 私には見えない。まあ単純に「trampoline()はループだ」と理解すれば良いでしょう。 なお、Clojureの同名の影響を大きく受けた機能のようです。移植といっても良いでしょう。しかし、ClojureとGroovyの言語の違いから、現状のGroovyでの表象(メソッド構成、メソッド名など)はある程度ズレてる気がします。 Clojureはともかく、Groovyにおいてforやwhileなどのループ構

    Closure#trampoline()とは何か - uehaj's blog
    nobusue
    nobusue 2011/01/23
    末尾再帰
  • groovy - Object Design Blog

  • クロージャのメモ化 - uehaj's blog

    ハイウェスト日記経由で、「Groovy 1.8 beta3 からClosureのメモ化ができるようになった」とのことを知り、情報を探してみました。 Implement closure memoization, like in GPars を読むとクロージャに以下の3つのメソッドが追加されています。 memoize() memoizeAtMost(n) memoizeAtLeast(n) memoizeBetween(m, n) メモ化と似たようなことは前に、Mapのデフォルト値設定(Map#withDefault{})を使ってやってみたりしたことがありましたが、要はパラメータに応じた呼び出し結果のキャッシュです。 今回定義されたクロージャのメソッドmemoize()を呼ぶと、「キャッシュするバージョンのクロージャ」を作って返してくれるようです。 ドキュメントコメントを読むと、キャッシュはL

    クロージャのメモ化 - uehaj's blog