2009-01-01から1年間の記事一覧
Scala言語仕様について、淡々と私(id:kmizushima)が読んで行き、それに対して他の参加者がツッコミを入れるという趣旨の会です。詳細および参加表明は、 第1回Scala言語仕様輪読会@scala-be : ATNDからよろしくお願いします。
って、関数を呼び出す事によるオーバーヘッドよりも値型参照型のboxing/unboxingによるものが大きいのではないかとふと思いついたので、以下のような簡単なベンチマークによって、その思いつきが正しいかどうか調べてみた。内容は簡単で、0〜10000000までの…
Pythonでは0 構文木を作ってそれをevalしているようなものなので、(たぶん)かなり遅い。implicit conversionを使って、Boolean型が要求された時点で、比較演算の構文木をevalしてBoolean型を返すようにしているのがミソ。 object Op extends Enumeration { v…
ICFPCを早々に諦めて、ちょっと凹んでいたところ、サークル関係の内輪のチャットで比較的手軽に解けそうな問題が貼られていたので、暇つぶしに解いてみた。出典はどこかよくわからんのだけど、http://ayacnews.blog57.fc2.com/blog-entry-6635.htmlなど、い…
(中略) 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…
主に型安全性に関する話について。必要悪的にそうなっているのであって、別にいい加減なわけじゃないよー、というScala擁護の話です。 つまるところ、ぼくが Scala に期待していたのは Ruby のような快適さ (書きやすい文法に豊富な便利メソッドなど) OCaml/…
flagir を作るなどの過程で感じた Scala への不満を列挙。こんな記事を (日本語で) 公開しても誰も得しないし誰も読まないだろうから、やめようかなとも思ったんだけど。ぼくの勘違いなら指摘してもらえるかもしれないし、記録という意味もあるのでやっぱり…
情報科学若手の会については、こちらのページから。名前がなんかお堅いですが、別にそれほどあかでみっくな場でも無いので、非研究者の人でもどしどし参加していただければ、と思います。どういう発表が過去にあったのかは、Webページの「過去の活動」を見て…
以前に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(P11-P20)を解いてみたの続き。P21-P30ではなく、P21-P28になっているのは、P27とP28がそれぞれ二問ずつあり、P28で一端問題が区切られているため。今回のは、時間を測り忘れていたが、前回よりもややてこずった気がする。…
なんとか無事に終了しました。参加していただいた皆様、どうもありがとうございました。特に、元々は金曜夜の短い時間を使ってやっていた内輪向けイベントに、つくばの外から来て、話を盛り上げてくださったk.inabaさん、m0h1canさん、車を出してくれた_tad_…
今回、つくばの外からお越しの方も居られるので、連絡先をさらしておきます。会場の場所がわからない、などの場合遠慮無く連絡していただければと思います。 メールアドレス:mizukota+mobile アットマーク gmail.com(携帯に転送されます) 電話番号:090さん…
Scalaの正規表現ライブラリは、Javaの正規表現ライブラリのラッパーになっていて、Javaのものよりもだいぶ使いやすくはなっているが、パターンマッチに使う時は、以下のように必ずvalなどでいったん変数に代入しなければならないという欠点がある。 scala> v…
S-99: Ninety-Nine Scala Problems(P01-P10)を解いてみたの続き。今回は、表題の通り、P11-P20までを解いてみた。とりあえず最初の回答を作るまでに大体50分くらい。その後、dropとrotateについて題意を勘違いしていたのに気づいてコードを修正。以下、回答…
Scalaの場合、パーザコンビネータでパーザ書いてる時によくあることなのだが、読みやすさのために、以下のように行頭に二項演算子を置いて式をつなげたい、ということがしばしばある。 lazy val statement: Parser[Statement] = ifStatement | forStatement |…
Scalaユーザ会で、「知っていると役に立つかもしれないScala言語 Tips」という題目で発表してきました。Scala言語 Tipsといいつつ、実体はScala言語仕様を参照しつつ、Scalaの重箱の隅をつつくような内容で、聴講者の層を考えると、テーマ選択を誤ったかなあ…
昨年の後半に第14回を開催してから、長らく中断していましたが、今月末に第15回未来会議を開催します。 日時:05月30日(土) 13:00〜 場所:筑波大学 3C213 情報学類生控室(第三エリアC棟2階) 発表者: id:ranha君 id:TELL君 他 プログラム:未定(決定次第追…
S-99: Ninety-Nine Scala Problemsというのは、P-99: Ninety-Nine Prolog Problemsが元ネタの、99個の小問題をScalaで解いてみるというもので、実際に99個の難易度の異なる問題が用意されている。一気に99個やるのはきついので、今日はとりあえず最初の10問(…
現在、Scalaでファーストクラスの継続を扱うことはできないが、Scala 2.8からは、コンパイラプラグインという形で、限定継続(Delimited Continuation)を扱う機能が提供されることになっている。2.8は未だリリースされていないが、Scala 2.8のnightly buildと…
まめめもより。 Scala を勉強してみます。売り文句だけ見てみると 1. 手続き型でも関数型でも書ける 2. 純粋なオブジェクト指向 3. 柔軟な文法で DSL しやすい 4. パターンマッチ 5. 静的型付け (ジェネリクスあり) 6. JVM で動く (Java の資産を活用できる)…
今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)King of Programming Language - 今までどのくらいプログラミング言語を触ってきたか(3秒で挫折したもの…
「最近、Scalaという新しい言語が注目されているらしい。ちょっと試してみるか」という人が、Scalaでは全ての値がオブジェクトであり、演算子の呼び出しも単なるメソッド呼び出しのシンタックスシュガーであるというような説明を聞いて、よくはまる落とし穴(…
型レベルプログラミングの会、略して型レ会、行って来ました。メモとか取ってなかったので詳細な感想は書けないのですが、とにかく濃い話が盛りだくさんで面白かったです。このように魅力的なイベントを主催していただいたk.inabaさん、魅力的な発表をしてく…
(追記)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…
シーケンス中で連続して同じ値が入っている各箇所について,2 個目以降は削除したシーケンスが欲しい,という問題. http://d.hatena.ne.jp/NyaRuRu/20090311/p1 パーザコンビネータというと、とかく、文字列のパーズのためだけのものと思われがちですが、こ…
Groovyには、?:という演算子があって、たとえば、 x ?: y という式があった場合、 x != null ? x : y と同じような働きをする(xの評価が2回行われない事を除いて)。で、これと同じ働きをする演算子をOnionにも追加してみた。使い方はGroovyのそれとほぼ同じ…
これまでPEGパーザコンビネータ作ってきた言語は、全て、レキシカルスコープの無名関数やそれに類似の機能を持っていたため、容易に作ることができましたが、C言語には無名関数のような機能が無いため、ちょっと頭をひねりました。とりあえず作ることを優先…
id:tad0さんのコメント: C#版きぼんぬ http://d.hatena.ne.jp/kmizushima/20090226/1235619468#c1235739906 ということで、C#版も書いてみました。C#については時々調べたりするものの、ほとんど全くと言っていいほど使っていないので(たとえば、今回、C# 3…
module宣言を使ったとき、たとえば、 module foo.bar; class A { @b: B; } class B {}みたいなときに、@b: BのB型が見つからないというコンパイルエラーが出ていたのを修正。Onionを自分でもっとまともに使ってたらとっくに気付いてたバグだなあ。module宣言…
【急募】PEGパーサのメモ化の実装 http://twitter.com/anatoo/status/1253132392 とかあったんで、せっかくなのでサクっと実装してみた。 ポイントは、PEGパーサコンビネータでは、ParserがString => Option[(A, String)]を継承していたのを、Int => Option[…