ToDo:
土浦 食べ放題ねえ。土浦魚市場のまぐろ食べ放題のことかなあ。他にもあるだろうけど、土浦まで出かけることはあまり無いので、これくらいしかわからない。
_ Fredk Follin [ * * * * * * * * * * * * * * * * * * * ..]
_ Bernard Archer [ * * * * * * * * * * * * * * * * * * * ..]
_ yrafcnhux sntfjcbhu [htpnmjcdy wmvbjg hsmubl qahlfn utbayw peqi waci ]
_ Uma Pukman [I would like to wish you much luck. And a lot of money. Th..]
_ Yuppy Tippy [Poem is a strange type of literature, isnt it? ]
大学の書籍部で見かけたので購入。これから少しずつ読んでいこう。
とりあえず2章の終わりまで読んだ。ここまで読んだ限りでは、入門Haskellよりもこちらの方が読みやすい。両方とも、最初はUnixのコマンドの簡易版をHaskellで作ることを通して、Haskellの機能に触れていくという点で同じスタイルのはずなのに、どこが違うのだろう。
で、なんでそう思うのか読み比べてちょっと考えてみたのだが、入門Haskellの方は、早い段階で言語の様々な機能を説明しようとしてややこしくなっているのに対して、ふつうのHaskellプログラミングの方は、より小出しに説明しているのですっきりして見えるのが違う気がする。
あと、本題とは関係無いが、P.32の
この「束縛する」という単語は使い方を間違いやすいので注意してください。「変数を値に束縛する」のであって、「変数が値を束縛する」のではありません。変数は束縛される側です。ってのは、つい最近まで自分は間違って覚えてた(「変数に値を束縛する」などと言っていた)ので、気をつけるようにしたい。
w_oさんの日記より引用:
ところで、どうでもいいんだけど、うちの家族は全員納豆食べるので、「関西人=納豆嫌い」という定説には違和感を感じるとかいう話が。
自分のところは、父親が納豆嫌いだったのを除けば、それ以外は全員特に躊躇無く納豆を食べていた。また、関西に居た頃の友人も、納豆が嫌いな人の割合はさほど多くは無かったように思う。というわけで、自分もこの定説には違和感を感じるので、ちょっと調べてみた。
「関西人 納豆 嫌い」でgoogleして、上位のページの い く つ かを見てみたところ、関西人が納豆嫌い(の人が多い)というのは、必ずしも間違いではないが、ここ数十年でかなり状況は変化してきており、段々と昔の話になりつつあるということのようだ。
_ pcsxakzy nxlpugsy [lbuvrz wzlp znxls flqwhcau ansekcx wzxukhc vgflen ]
_ wrpfdby kupstwdm [afzde seajipwmd dofmvit sbocgvkn fjdu vycujnm wdeuxlfrg ]
_ fkma gqof [sfvdrmxek smujrb homjfepku eoslnh tdvc rpyz bzyu ]
_ oleg [Just test. We are sorry for inconveniences. Please, send..]
_ homebus [I've just been letting everything happen without me lately..]
_ gambling online sports [Your site has very much liked me. I shall necessarily tell..]
_ 3card poker [Very interesting and beautiful site. It is a lot of ful in..]
_ casino gambling [Your site is very convenient in navigation and has good de..]
_ buy generic viagra [You are the best! Im glad... ---------- ]
_ cheap tramadol [This is one of the best sites I have ever found. Thanks!!!..]
九十九式より引用:
ある日、上司と話していると、話がメイン事業の今後の展開に至った。そこで指示された戦略やアイデアが、まさに僕の実行しようとしていたこととそっくりだったため、つい僕はこう言ってしまった。
「ああ、その話なら、私が考えていたことと同じですね。」
(中略)
誰だって、自分の話を興味深げに聞いてもらえれば嬉しい。逆に、とっておきの話を「それはもう知ってますよ」と1回でも言われたら、もうその人には話をしたくなくなるだろう。
耳が痛い話だ。自分も、同様のセリフ(「その話、前も言ってましたよ」など)を過去に何度か言ってしまった記憶がある。もちろん、そういう発言が相手に失礼というのは理解しているつもりではあるのだが、つい言ってしまうということはよくあるものだ。他にも、自分は言わなくてもいいことをつい言ってしまう悪癖があるので、気をつけるようにしよう。
今日は、できるだけ楽に走れるペースを心がけて、かなりゆっくりめに走ってみた。すると、走り終えた後の疲労度が段違いに違う。いつもなら、走り終えて1時間くらいすると疲労がどっと押し寄せてくるのだが、今日はそういうことも無い。
なんかものすごく久しぶりに、Onion開発日記らしい話題。現在のOnionは、インスタンス変数を宣言するときや宣言したクラス内で参照するときは@変数名とするような仕様になっている。例えば、クラスFooにint型のインスタンス変数fooを宣言する場合は、次のような感じになる。
class Foo {
@foo :int;
new(foo :int){
@foo = foo;
}
}
しかし、この仕様はどうもイマイチのではないかと、最近思うようになってきた。というのも、publicなインスタンス変数を他のクラスから参照するときに、メソッドの呼び出し構文(Onionではobj.method()のようになっている)との整合性を考えると、obj.@fooとするのが自然なのだが、これはちょっと醜い。
というわけで、現在のOnionでは、他クラスのインスタンス変数を参照するときは、obj.fooと書けるようになっているのだが、これはこれで、インスタンス変数の宣言の構文と整合性が取れておらず、別の意味で醜い。
とりあえずの落とし所としては、宣言の構文に@をつけるのをやめて、インスタンス変数の参照時の@は、self.のシンタックスシュガーだということにするくらいだろうか。しかし、これもイマイチな気がする。どうしたものだろうか。
Jより引用:
下限境界って、どういう状況を意図したものなんだ?
この辺の理論的な話は詳しく無いので置いておくとして、実際のところ、型パラメタがメソッドの仮引数の型として使われるようなGenericなクラスを扱うときに必要になります。以下では、このことを、リストをソートするメソッドの定義を例として説明してみることにします。間違った説明の仕方をしている可能性はおおいにあるので、識者の方、もし見ておられたら、ツッコミをお願いします。
まず、リストを表すインタフェースList
interface List<E> {
boolean add(E o); //末尾に要素を追加する
...
E get(int index); //index番目を取得する
...
E set(int index, E o); // index番目の要素にoを設定する
}
と、2つのオブジェクトを比較するためのインタフェースComparator
interface Comparator<T> {
int compare(T t1, T t2);
}
があったとして、Listの要素をComparatorを使って比較してソートするメソッドsortを書くことを考えてみます。素直に考えると、任意の型のListと、その型のオブジェクト同士を比較するComparatorを引数に取るメソッドを書けば良いことになるので、次のように、型引数Tを取るGeneric Methodを書けばいいように思えます。
void <T> sort(List<T> lst, Comparator<T> c){
...
}
これで、任意の型のListについて、その型同士を比較するComparatorを渡してソートすることができますから、一見問題無いように見えます。
しかし、IntegerがObjectを継承していることを利用して、Object同士をhashcode値に基づいて比較するComparator<Object>型のオブジェクトを用いてInteger型のリストをソートしたくなったとします。ここで、List<Integer>型の変数numListとComparator<Object>型の変数objCompがあったとすると、これらに対するsortメソッドはsort(numList,objCmp)のようになります。しかし、これは型エラーになります。というのも、T=Integerとすると、sortメソッドのシグネチャはsort(List<Integer>, Comparator<Integer>)となりますが、Comparator<Integer>はComparator<Object>のスーパータイプでは無いためです。
ここで、ワイルドカードの上限境界を使って、sortメソッドを次のように定義すれば良いと思われるかもしれません。
<T> void sort(List<? extends T> lst, Comparator<T> comp){
...
}
こうすると、T=Objectのとき、sortメソッドのシグネチャはvoid sort(List<? extends Object>, Comparator<Object>)となり、List<? extends Object>はList<Integer>のスーパータイプであるため、上のようなケースでも、sortメソッドを呼び出すことができるようになります。
しかし、これではメソッドsortを定義することが実質的にできなくなります。というのは、このsortメソッドは内部でlstを変更するE set(int,E)などのメソッドを使用する必要がありますが、lstの型はList<? extends T>であるため、setのようにListの型パラメタEを取るメソッドを呼び出すことができないためです。
この問題を解決するには、ワイルドカードの下限境界を使って、sortメソッドを次のように定義します。
void <T> sort(List<T> lst, Comparator<? super T> cmp){
...
}
このようにsortメソッドを定義すると、T=Integerのとき、sort(List<Integer>, Comparator<? super Integer>)となり、Comparator<? super Integer>は、Comparator<Object>のスーパータイプなので、sort(numList, objComp)のように呼び出しても、型エラーになりません。また、下限境界では、型パラメタをメソッドの仮引数に取るメソッドは呼び出すことができますから、cmpに対してcompareを呼び出すこともできます。
Java 5.0の標準ライブラリ中(特にコレクションライブラリ)でも、ワイルドカードの下限境界はそれなりに使われており、例えばjava.util.Collections#sortメソッドのシグネチャは、まさに上で定義したものとほぼ同じになっています。
セッション内容より
……。去年にも増して、何でもアリ感がただようラインナップだ。ついにOCamlやFORTHもLLですか!あと、JSR-223はGaucheが言語名じゃない以上に言語じゃない、というか単なるAPIなのに何で入ってるんだとか、JavaScriptもActionScriptもどちらも言語としてはECMAScript系でほとんど同じでしょ、とかいろいろ言いたくなってくる(awkは去年もあったのでつっこまない)。これだったら、ひょっとして、誰かがJavaとかC#で発表を申し込んでも通ってしまうんじゃなかろうか。もちろん、毎年楽しませてもらっているし、ケチつけるつもりは欠片も無いんだけど、ここまで来ると、LLというか単にプログラミング言語一般のイベントという名目にした方がいいんじゃないかと思ったり。
ここのところ、連日走ったためか足がちょっと疲れ気味のようなので、今日は ウォーキングにしてみた。走っているときよりも、ゆっくり考え事をしたり周りの景色を眺める余裕があって、これはこれで楽しい。
Groovyで書いてみた。まずはこんな感じのコード。
println ((2..100).findAll{x->(2..x/2).every{x%it!=0}})
しかし、実行してみると、何故か2が含まれない。
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79 , 83, 89, 97]
たぶん、範囲式の使い方が原因だろうということで、ちょっと調べてみる。
(2..1).each{println it}
=>
2
1
どうやら、(x .. y)で、x>yの場合は、空の範囲を生成するのではなく、x, x-1,x-2,...,yの範囲を生成するようだ。しかも、Groovyの公式ページのドキュメントを見ても、この仕様に関するきちんとした記述が見当たらないorz
仕方無いので、内側のループは2..x/2ではなく、2...xにすることにした。
println ((2..100).findAll{x->(2...x).every{x%it!=0}})
今度は、ちゃんと2も出力されるようになった。
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Before...
_ Hoodia diet [Hi, Fine design. best regards]
_ provillus [Nice site and good design! Best regards!]
_ homebus [I've just been letting everything happen without me lately..]
_ Acnezine [Order Acnezine]
_ Acnezine reviews [great site, fine..]