kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

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

第1回Scala言語仕様輪読会@scala-be

Scala言語仕様について、淡々と私(id:kmizushima)が読んで行き、それに対して他の参加者がツッコミを入れるという趣旨の会です。詳細および参加表明は、 第1回Scala言語仕様輪読会@scala-be : ATNDからよろしくお願いします。

foreachとwhileの速度差

って、関数を呼び出す事によるオーバーヘッドよりも値型参照型のboxing/unboxingによるものが大きいのではないかとふと思いついたので、以下のような簡単なベンチマークによって、その思いつきが正しいかどうか調べてみた。内容は簡単で、0〜10000000までの…

Python風比較演算子をScalaで実装してみた

Pythonでは0 構文木を作ってそれをevalしているようなものなので、(たぶん)かなり遅い。implicit conversionを使って、Boolean型が要求された時点で、比較演算の構文木をevalしてBoolean型を返すようにしているのがミソ。 object Op extends Enumeration { v…

↓の文を読み、誰が魚を飼っているかを当てて下さい

ICFPCを早々に諦めて、ちょっと凹んでいたところ、サークル関係の内輪のチャットで比較的手軽に解けそうな問題が貼られていたので、暇つぶしに解いてみた。出典はどこかよくわからんのだけど、http://ayacnews.blog57.fc2.com/blog-entry-6635.htmlなど、い…

Dictionaryリテラルっぽい何か

C#

(中略) static void Main(string[] args) { var dict = Dict.Create( (out string key, out int val) => { key = "hoge"; val = 0; }, (out string key, out int val) => { key = "piyo"; val = 10; }); foreach (var p in dict) { Console.WriteLine(p.ToSt…

Re:Re:Re:不満の記録

主に型安全性に関する話について。必要悪的にそうなっているのであって、別にいい加減なわけじゃないよー、というScala擁護の話です。 つまるところ、ぼくが Scala に期待していたのは Ruby のような快適さ (書きやすい文法に豊富な便利メソッドなど) OCaml/…

Re:不満の記録

flagir を作るなどの過程で感じた Scala への不満を列挙。こんな記事を (日本語で) 公開しても誰も得しないし誰も読まないだろうから、やめようかなとも思ったんだけど。ぼくの勘違いなら指摘してもらえるかもしれないし、記録という意味もあるのでやっぱり…

第42回情報科学若手の会参加申し込み受付開始

情報科学若手の会については、こちらのページから。名前がなんかお堅いですが、別にそれほどあかでみっくな場でも無いので、非研究者の人でもどしどし参加していただければ、と思います。どういう発表が過去にあったのかは、Webページの「過去の活動」を見て…

Scalaでコンパイル時アサーション

以前にMetaScalaで見かけて、なるほどーと思ったテクニック。実装は非常に簡単。 scala> type assertEq[A, B >: A <: A] = Nothingたったこれだけ。説明は不要だと思うが、Scalaだと、型パラメータのlower boundとupper boundの両方を指定できる事を利用して、BはAのサブタイプかつスーパータイプでなければならないという指定によって、型Aと型Bが等しい事をassertしている。使い方は以下のような感じ。 scala> type x = assertEq[Int, Int] defined type alias x scala> ty…</:>

S-99: Ninety-Nine Scala Problems(P21-P28)を解いてみた

S-99: Ninety-Nine Scala Problems(P11-P20)を解いてみたの続き。P21-P30ではなく、P21-P28になっているのは、P27とP28がそれぞれ二問ずつあり、P28で一端問題が区切られているため。今回のは、時間を測り忘れていたが、前回よりもややてこずった気がする。…

第15回未来会議終了

なんとか無事に終了しました。参加していただいた皆様、どうもありがとうございました。特に、元々は金曜夜の短い時間を使ってやっていた内輪向けイベントに、つくばの外から来て、話を盛り上げてくださったk.inabaさん、m0h1canさん、車を出してくれた_tad_…

第15回未来会議:連絡先について

今回、つくばの外からお越しの方も居られるので、連絡先をさらしておきます。会場の場所がわからない、などの場合遠慮無く連絡していただければと思います。 メールアドレス:mizukota+mobile アットマーク gmail.com(携帯に転送されます) 電話番号:090さん…

Extractorを使った正規表現ライブラリの簡易ラッパー

Scalaの正規表現ライブラリは、Javaの正規表現ライブラリのラッパーになっていて、Javaのものよりもだいぶ使いやすくはなっているが、パターンマッチに使う時は、以下のように必ずvalなどでいったん変数に代入しなければならないという欠点がある。 scala> v…

S-99: Ninety-Nine Scala Problems(P11-P20)を解いてみた

S-99: Ninety-Nine Scala Problems(P01-P10)を解いてみたの続き。今回は、表題の通り、P11-P20までを解いてみた。とりあえず最初の回答を作るまでに大体50分くらい。その後、dropとrotateについて題意を勘違いしていたのに気づいてコードを修正。以下、回答…

ひょっとしたら役に立つかもしれないScala Tips(3) 二項演算子を行頭に置く

Scalaの場合、パーザコンビネータでパーザ書いてる時によくあることなのだが、読みやすさのために、以下のように行頭に二項演算子を置いて式をつなげたい、ということがしばしばある。 lazy val statement: Parser[Statement] = ifStatement | forStatement |…

[Scala] Scalaユーザ会

Scalaユーザ会で、「知っていると役に立つかもしれないScala言語 Tips」という題目で発表してきました。Scala言語 Tipsといいつつ、実体はScala言語仕様を参照しつつ、Scalaの重箱の隅をつつくような内容で、聴講者の層を考えると、テーマ選択を誤ったかなあ…

第15回未来会議(5/30)

昨年の後半に第14回を開催してから、長らく中断していましたが、今月末に第15回未来会議を開催します。 日時:05月30日(土) 13:00〜 場所:筑波大学 3C213 情報学類生控室(第三エリアC棟2階) 発表者: id:ranha君 id:TELL君 他 プログラム:未定(決定次第追…

S-99: Ninety-Nine Scala Problems(P01-P10)を解いてみた

S-99: Ninety-Nine Scala Problemsというのは、P-99: Ninety-Nine Prolog Problemsが元ネタの、99個の小問題をScalaで解いてみるというもので、実際に99個の難易度の異なる問題が用意されている。一気に99個やるのはきついので、今日はとりあえず最初の10問(…

限定継続を実現するScalaコンパイラプラグインを試してみる

現在、Scalaでファーストクラスの継続を扱うことはできないが、Scala 2.8からは、コンパイラプラグインという形で、限定継続(Delimited Continuation)を扱う機能が提供されることになっている。2.8は未だリリースされていないが、Scala 2.8のnightly buildと…

Re: 勉強帳 (1)

まめめもより。 Scala を勉強してみます。売り文句だけ見てみると 1. 手続き型でも関数型でも書ける 2. 純粋なオブジェクト指向 3. 柔軟な文法で DSL しやすい 4. パターンマッチ 5. 静的型付け (ジェネリクスあり) 6. JVM で動く (Java の資産を活用できる)…

今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)

今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)King of Programming Language - 今までどのくらいプログラミング言語を触ってきたか(3秒で挫折したもの…

Scalaの落とし穴(1) - 整数リテラルに対するメソッド呼び出し

「最近、Scalaという新しい言語が注目されているらしい。ちょっと試してみるか」という人が、Scalaでは全ての値がオブジェクトであり、演算子の呼び出しも単なるメソッド呼び出しのシンタックスシュガーであるというような説明を聞いて、よくはまる落とし穴(…

型レベルプログラミングの会

型レベルプログラミングの会、略して型レ会、行って来ました。メモとか取ってなかったので詳細な感想は書けないのですが、とにかく濃い話が盛りだくさんで面白かったです。このように魅力的なイベントを主催していただいたk.inabaさん、魅力的な発表をしてく…

Red-black tree Scala版についてちょっと気になった点

(追記)Scalaでの実装。 abstract class Node case class Leaf() extends Node case class R(left: Node, key: int, right: Node) extends Node case class B(left: Node, key: int, right: Node) extends Node def balance(left: Node, key: int, right: Nod…

前後の値も利用したシーケンス処理をScalaのパーザコンビネータで解いてみた

シーケンス中で連続して同じ値が入っている各箇所について,2 個目以降は削除したシーケンスが欲しい,という問題. http://d.hatena.ne.jp/NyaRuRu/20090311/p1 パーザコンビネータというと、とかく、文字列のパーズのためだけのものと思われがちですが、こ…

Groovy(やgcc拡張)の?:演算子をOnionに追加してみた

Groovyには、?:という演算子があって、たとえば、 x ?: y という式があった場合、 x != null ? x : y と同じような働きをする(xの評価が2回行われない事を除いて)。で、これと同じ働きをする演算子をOnionにも追加してみた。使い方はGroovyのそれとほぼ同じ…

Cで作るPEGパーザコンビネータ

これまでPEGパーザコンビネータ作ってきた言語は、全て、レキシカルスコープの無名関数やそれに類似の機能を持っていたため、容易に作ることができましたが、C言語には無名関数のような機能が無いため、ちょっと頭をひねりました。とりあえず作ることを優先…

C#で作るPEGパーザコンビネータ

id:tad0さんのコメント: C#版きぼんぬ http://d.hatena.ne.jp/kmizushima/20090226/1235619468#c1235739906 ということで、C#版も書いてみました。C#については時々調べたりするものの、ほとんど全くと言っていいほど使っていないので(たとえば、今回、C# 3…

Onionのバグ修正

module宣言を使ったとき、たとえば、 module foo.bar; class A { @b: B; } class B {}みたいなときに、@b: BのB型が見つからないというコンパイルエラーが出ていたのを修正。Onionを自分でもっとまともに使ってたらとっくに気付いてたバグだなあ。module宣言…

Scalaで作るPackrat Parserコンビネータ

【急募】PEGパーサのメモ化の実装 http://twitter.com/anatoo/status/1253132392 とかあったんで、せっかくなのでサクっと実装してみた。 ポイントは、PEGパーサコンビネータでは、ParserがString => Option[(A, String)]を継承していたのを、Int => Option[…