2012-01-01から1年間の記事一覧

Haskell グローバル変数

グローバル変数(続) - HaHaHa!(old) - haskell型定義を書くとしたら次のようになるのか。 module Main where import System.Environment main = putStr . func1 . elem "-c" =<< getArgs type Options = Bool func1 :: Options -> String func1 = func2 fu…

Parsec many many1 の入れ子

Parsec のコンビネーター many1 は入れ子にすると下記のとおり、型が異なる。 Prelude> :m +Text.Parsec Prelude Text.Parsec> :t many1 (char 'a') many1 (char 'a') :: Stream s m Char => ParsecT s u m [Char] Prelude Text.Parsec> :t many1 (many1 (ch…

は可換ではない

以下、二重引用符で囲った文字列を解析するパーサーを書いたもの。 二重引用符のエスケープ文字として \ が使える。 module Main where import Text.ParserCombinators.Parsec main :: IO() main = parseTest parseString "\"abc\\\"def\"" parseString :: P…

PeopleTools 8.52 Action Buttons does not work.

Action buttons like a search button and "Add New Value" link do not work in PeopleTools 8.52.Apply patches. Then they will work.If you couldn't get patches, here is a workaround.But do not apply this for a comercial environment. Do this at…

mod point free style

Prelude> filter ((0==).(`mod` 3)) [1..20][3,6,9,12,15,18]しかし、次の方が断然、読みやすい。Prelude> [x | x <- [1..20], x `mod` 3 == 0][3,6,9,12,15,18]

newtype 構成子 N は リフト されない。すなわち、N _|_ は _|_ である。

4.2.3 Datatype Renamings Unlike algebraic datatypes, the newtype constructor N is unlifted, so that N _|_ is the same as _|_.The Haskell 98 Report: Declarations 日本語 4.2.3 データ型名の付け替え 代数的データ型とはちがい、newtype 構成子 N …

Could not find module `System.FilePath'

Haskell エディタ Leksah でコンパイルしたところ、以下のエラーが発生。 src\Main.hs:3:8: Could not find module `System.FilePath' It is a member of the hidden package `filepath-1.3.0.0'. Perhaps you need to add `filepath' to the build-depends …

{-# LANGUAGE CPP #-} Main.hs:0:4: lexical error (UTF-8 decoding error)

See this page. haskell - Cabal install complains "<built-in>:0:4: lexical error (UTF-8 decoding error)" - Stack Overflow -- Test.hs {-# LANGUAGE CPP #-}この Haskell ソースファイルをロードすると以下のエラーが発生。Prelude> :load TestTest.hs:0:4: lexi</built-in>…

java.exe の実行パスに環境変数 PATH の設定が反映されない(Windows)

java.exe は C:\Windows\System32 にもインストールされる。 したがって、下のように PATH の設定で %SystemRoot%\system32 が %JAVA_HOME%\bin よりも先に位置している場合、優先されるのは前者であるから、 %SystemRoot%\system32\java.exe が実行される。…

The Principle of Truth in Advertising および Principle of Indecent Exposure

Java では、配列よりも、List などのコレクション・オブジェクトを使用する方がメリットが遥かに大きい。 特にジェネリック型の配列は、発見しにくいバグも生みやすく、出来るだけ使用を避けるべきである。 ジェネリック型の配列を使わない、これが大原則で…

ArrayList の初期化イディオム

Java言語で固定要素のListを初期化する際のイディオム - 達人プログラマーを目指して List<String> list = Arrays.asList("data1", "data2", "data3"); だと、add()やremove()などの要素の追加削除はできないそうだ。同エントリのブクマコメントより。僕はArrays.asL</string>…

内部クラスからアクセス可能なローカル変数が final でなければならない理由

なぜ、内部クラス(ローカルクラス、匿名クラス)からアクセス可能なローカル変数が final でなければならないのか、 その理由が次の記事に説明されている。いまさらだけど、Java言語にはクロージャーがない - 達人プログラマーを目指してしかし、 つまり、…

コマンドプロンプト %〜% のエスケープ

コマンドライン・プロセッサは、入力文字列に対して、検索文字列: %環境変数% 置換文字列: 環境変数の値という置換処理を行う。したがって %〜% は 〜 に対応する環境変数があれば、 %〜% は、その環境変数の内容で置換され、 なければ %〜% という文字列が…

やはり T.class や new T() をしなくてもよい。

Nagise氏の「ぶっちゃけるとT.class やnew Tしたいケースは設計が悪いのだと思う。」という言葉の通りなのか、Javaのジェネリクスで,T.class や new T() ができず悩んだ話 (型パラメータのインスタンス化に関し、フレームワーク設計からケーススタディ) -…

バージョンによる型推論アルゴリズムの違い

書籍『Java Generics and Collections』の 1.4 Generic Methods and Varargs の説明によると、 public class Lists { public static <T> List<T> toList(T... arr) { List<T> list = new ArrayList<T>(); for (T elt : arr) list.add(elt); return list; } } というコー</t></t></t></t>…

final 定数をインライン化しないで使用する

後々、変更されるような値を final 定数にすること自体が設計ミスであるが final 定数の値変更に対して再コンパイルを必要としないクライアントコードを書くことができる。具体的には、リフレクションによって定数値を読み込むことで final 定数をクライアン…

enum 定数の switch 文の実装

switch 文の case ラベルが int や short のプリミティブ型の final 定数であれば、その即値が switch 文にインライン展開される。 したがって、定数の値が変更されたら、その switch 文を使うクライアントコードは再コンパイルが必要になる。 ところが、列…

Javaの定数がインライン化される理由

Javaの定数がインライン化される理由は、実行時に switch 文のラベルの定数値に重複がないことをコンパイル時に保証することにある。 次のリンク先には Javaの定数がインライン化される理由について書かれている。トップ同じことが書籍『Java言語仕様 第3版…

ラッパークラスのキャッシング

基本データ型のラッパークラスのキャッシュが適用されるのは、ボクシング変換のときである。 Java Generics and Collections には次のような記述がある。Caching is required when boxing an int or short value between -128 and 127, a char value between…

Expression Problem の型安全性

ジェネリクスによるVisitorパターン拡張の考察2009-05-16 静的で安全に(キャストせず)、 元のコードを一切変更せず、 新しい場合分けを加え、 新しい操作も加えた 新しい場合分け構造を定義する 以下のコードは、条件2〜5を満たすが、 1.静的で安全に(キャス…