みどりねこ日記

よくわからないけど、頑張りますよ。

未踏事業に出した提案が不採択となったので資料を公開します

大学院時代の友人である森下くんと一緒に未踏事業に出した提案が不採択となりました。 私は今年25歳になり、来年以降は未踏事業の年齢制限に引っかかってしまうため、今回が未踏クリエータになる最後の機会でした。 そして残念ながらそれを活かすことができ…

Pythonを呼べるLispを作った話

この記事はLisp Advent Calendar 2016 5日目の記事です。 Futhonとは Futhonとは、Pythonが呼べるLispである。 先日作ってみた。 読み方は「ふとん」である。 本記事は、Futhonの内部実装がどうなっているかを簡単に説明する。 すごく小さな実装(ソースコー…

YANSに参加してきました

YANS参加したよ!ってブログ書こうと思ったけど、24時間しか参加してないし夜はお酒飲みすぎて記憶が飛んでるから書けることがあんまりない— でりひろ (@delihiros) 2015, 9月 5 大体上に書いてあるとおりなんですが、そういうわけにもいかないので絞り出し…

「迷子になったら動くな」を検証してみた

今日友達とホームセンターに行ったら迷子になってしまった。 いや、はぐれちゃっただけなんだけど、僕は携帯を持ってなかったし、この年で迷子センターに行くのもなーってことでしばらくウロウロして探した。 そこでふと幼い頃「迷子になったらそこから動く…

簡単に人の顔に泥を塗る方法

僕は人の顔に泥を塗るのを得意とするのですが、泥を塗るのにも労力がかかるんですよ。 なので常日頃からこの作業を自動化できないかと思っていたので、論文の息抜きにやってみました。 import sys, cv2, random imagefilename = sys.argv[1] image = cv2.imr…

ヤドカリごっこ

結局NAISTで自然言語の研究することに決めた。 関係者各位よろしくお願いします。 高校時代と大学入った当初はプログラミング言語に一番興味あって、当然大学院もそっち方面を研究しようと思っていた。 まさか自分が当時一番胡散臭いと思っていた自然言語に…

大学のメールアドレスにスパムメールが届いた人へ

おはようございます。 昨日酔った勢いでスパムメールを書いてしまいました。 大学のメアド宛にこんなメールが pic.twitter.com/7CI1v45l3k— Shunichi (@FreeForAll_FAL) 2014, 9月 3 今は公開している。 そもそもなぜこんなことをしたかというと、大学からフ…

東京大学大学院情報理工学系研究科合格しました

無事合格しました。 関係者の皆様、特に研究室のメンバーとアルバイト先の方々、ありがとうございました。 入学した場合は創造情報学専攻の千葉研究室でプログラミング言語の研究などをすると思います。 先月NAISTの窓口に問い合わせたところ、悩む猶予をい…

NAIST合格しました

奈良先端科学技術大学院大学情報科学研究科に合格しました。 みなさんには大変お世話になりました。ありがとうございました。 僕は言語処理とかに興味があったのですが、うちの大学ではそのへんを扱っている研究室はなかったので外部の院を探していたところ…

Clojure内部のメソッド定義について

最近Clojureのコード読んでたんですが、いたるところ(このへんとか)に public Object invoke() ; public Object invoke(Object arg1) ; public Object invoke(Object arg1, Object arg2) ; public Object invoke(Object arg1, Object arg2, Object arg3) ;…

instaparseで遊ぶ

この記事はClojure Advent Calendar 2013 - Qiita [キータ]19日目の記事です。 instaparse 本記事ではinstaparseというライブラリを使って遊んでみます。 instaparseはEBNFやABNFで記述された文脈自由文法から自動的にパーサを生成してくれます。 左再帰、…

シリコンバレーいってきた

夏のインターンの関係で、シリコンバレー行ってきた。 すごいおいしいみたいな印象があったライスクリスピー、久しぶりに食べたらクッソまずかった。 けど友達にも「美味しいよこれ!!!」って言って買わせた手前、美味しいねこれ!って言いながら食べ続け…

macroless unless

(defn unless [test then else] (if test (else) (then))) (unless true #(println "hello") #(println "good bye")) good bye nil 素直にマクロ使おう。

Clojure:binding と遅延シーケンス

Clojure in Action読んでて、へえってなったのでメモ。 当然と言えば当然なのかもしれないけれど。 (def ^:dynamic *factor* 10) (defn multiply [x] (* x *factor*)) (map multiply [1 2 3]) (binding [*factor* 20] (map multiply [1 2 3])) Clojure の va…

夏休み

VOYAGE GROUPとDeNAインターンに参加した。 どちらも徹夜続きで死ぬかと思った。楽しかったけれど。 両方優勝することができたけれど、他チームと比べてダントツ!ってわけじゃなかったし、悔しい。 DeNAインターンの途中に楽天ハッカソンに参加して惨敗して…

パーサの連接とか

前回までに出てきた基本的なパーサをくっつけることで複雑なパーサが書けるわけですが、 今回はそのような連接とかを手助けしてくれるパーサコンビネータを紹介?します。 Kern のパーサコンビネータはシーケンス化、反復、選択、それと括弧の対応とかの面倒…

数字のパース

kern にはいくつか数値のパーサが用意されてて、これらは結果として文字列ではなく適切な数値型を返します。これらのパーサは名前空間 lexer 内のそれらに比べてサポートする数値型は少ないし、空白とかコメントとかもスキップしません。つまるところ、大き…

Kern のプリミティブパーサ

Kern にもプリミティブなパーサがあって、これらを組み合わせていくことで大きなパーサを作るというのが関数型らしいパーサの作り方なわけですが。 それらをちょっと見ていきます。 Kern けっこうかわいいわあ。 (use 'blancas.kern.core) return は常に成功…

Clojure の パーサコンビネータライブラリ Kern

Clojure でパースするとき、みんなどうしてるんだろう。 Parsec のようなものがあればいいのに〜、と思って探してみたところ、この Kern が一番よさげだった。 特徴 状態モナドベースのコンビネータ群 C, Java, Haskell, Shell の構文をサポート パースと式…

どういったときに IORef を使うべきか

どういったときに IORef を使うべきか、という疑問が湧いてきたので、ぐぐってみると stackoverflow に同じ質問してる人がいたのでそれを訳してみる(2009年のものだから情報古いかも)。 "いつ IORef を使うべきか混乱しています。 IORef を使うべきか…

構文メモ

関数型言語 <ラムダ式> ::= <変数> | <ラムダ式> <ラムダ式> | λ <変数> . <ラムダ式> | ( <ラムダ式> ) <関数定義> ::= ( <関数名> <ラムダ式> )論理型言語 <論理式> ::= <リテラル> | <論理式> -> <論理式> | <論理式> ∧ <論理式> | <論理式> ∨ <論理式> |…

Parsec を使って Apache のログファイルをパースしてみる2

さて、ログの行をパースすることができるようになったので、これをコマンドラインツールにしましょう。今回は IO と do 記法を用いて作業します。ですので、少なくとも基本は知っていることが望ましいです。もし不安なら、Learn You a Haskell を読みましょ…

Parsec を使って Apache のログファイルをパースしてみる

この記事について この記事は、 Erik さんのvariadic.me - Adventures in Parsec - Part 1を翻訳したものです。 導入 Haskell について知っていればいるほど良いですが、あなたが熱心な Haskeller であるならこの記事は少々退屈に感じるでしょう。もし Haske…

さらなるパーサへの誘い

引き続き、Magnus氏のブログの翻訳です。 前回の記事に対して、Conal Elliottから興味深いコメントを頂きました。 もっと関数的でApplicativeな書き方をしてもいいかもね。 doで繋がったParsecコードをliftM, liftM2, ...といったように置換してみよう。読ん…

パーサへの誘い

Magnusさんのご厚意により、邦訳してもよいことになりましたので掲載させて頂きます。 もとの記事はこちらのAdventures in parsingです。 私はParsecが使いこなせるようになりたいと常日頃から思っていました。何度か試してみたのですが、そのいずれもどこか…

Scalaは関数型プログラミング言語ではない

面白い記事があったので読んでみました。翻訳です。ライセンスはCreative Commonsです。 しばらくScalaで仕事をして、疑う余地なく以下のことが断言できるようになりました。”Scalaは関数型言語ではありません。クロージャを持ち、静的な型を持つオブジェク…

Haskellモナドトランスフォーマー(12)

今まで、MaybeTとListTという2つの非常に単純なモナドトランスフォーマーの実装をしてきました。それから、少し遠回りをしてモナドをそれのトランスフォーマーに持ちあげるという話もしましたね。ここでは、その二つの考えを、StateTという標準ライブラリの…

Haskellモナドトランスフォーマー(11)

liftの実装はわりと素直です。MaybeTトランスフォーマーの場合を見てみます。 instance MonadTrans MaybeT where lift mon = MaybeT (mon >>= return . Just) 内側のモナドを値に適用し、サンドイッチで言う真ん中までの処理を行ったあと、>>=演算子と型コン…

Haskellモナドトランスフォーマー(10)

モナドトランスフォーマーによって合成されたモナドを使うとき、内側のモナドをきちんと考える必要がないようにしたいところです。そのほうが綺麗でシンプルなコードになるからです。内側のモナドの型を持った値を扱う計算の中でdoブロックを使うより、内側…

Haskellモナドトランスフォーマー(9)

標準ライブラリの中でも、とりわけ使いやすい関数の一つに、liftMがあります。モナディックでない関数をモナドの関数に持ち上げます。型を見てみましょう。 liftM :: Monad m => (a1 -> r) -> m a1 -> m r さて、liftMは関数(a1 -> r)と、a1を保持したモナド…