Hash λ Bye

Haskell, Clojure, MLなどの話

プログラミング言語学習の助走

なにか気になるプログラミング言語を見つけたとする。 僕が社会人になりたての頃は形から入っていたのか、とりあえずそのプログラミング言語の本を買ってた。その本を片手にいきなり腰を据えてコードを書き始めるって感じたった。 真正面から取り組むのは意…

コードを書く時の生産性の低さに気付く

大して複雑なコードでもないのに、スクリプト書くのに3時間もかかった話。 問題 仕事で必要になりそうなスクリプトを書いてた。 公開できないけど。 以降に説明するような処理をするClojureのスクリプトを書いていたが、 あらかた満足に動くようになるまで3…

duct-frameworkに定時起動ジョブを仕込む

ただのtips。みんな気付いているけどショボすぎて言わないことだ。 ductをREPLから起動・停止くらいはできる人に向けている。 それも解らないよーという人は、なんというか、なんでこの記事を読もうと思ったのか。 そういう人はこちらを読むと良いと思う。 C…

Clojure思ったより書けない問題

今日ちょっと仕事でデータの加工して集計する作業があったので、 加工スクリプトにClojure使おうとした。 結果、全然書けなくて愕然とした訳だけど、その理由を考えてみる。 ちなみにClojureは全く悪くない。僕が勉強不足だっただけ。 1. CIDER REPLとバッフ…

Haskellで再帰的な構文木にFix(不動点)を導入してみる

まえおき 例によって僕の記事など読まなくても下記のリンクで解説されているので、 Haskell楽しいなと思う人はこちらをどうぞ。 An Introduction to Recursion Schemes 生きるのに疲れた人は半分白目のゆるい気持ちで以降を読んでね。 Haskellで抽象構文木 (…

Haskellで抽象構文木 (AST) にメタデータを付与する

2018-01-04 追記: ここで全部語り尽くされている気がしたので、Labelling AST Nodes with locations なにもこんなブログ読むことはないのかもしれない。 megaparsecを使って構文解析器を書いている。 構文解析やっているとASTにソースファイルの位置情報とか…

プログラミングClojureにおける「データ」とは何か

プログラミングClojureは僕が読んだ二冊目のClojureの本で、 Clojureがどんな機能を備えているのか、どんなパラダイムなのかを 教えてくれるとても良い本。 読み終わった今でも時々、「あそこどう書いてたっけな」と気になってはすぐに読み返してしまう。 し…

Left Recursionの悪夢再び

はじめに Happyで生成したパーサのコンパイル遅すぎてもう限界だったのでparser combinatorに戻ってきた。 そしてまた現れたのだ、やつが。。。。 問題 やろうとしてることは以前と変わらない。 SML Definitionを読んで型の注釈を表す式 ty を解析しようとし…

GHCの中間言語Coreへの脱糖を覗き見る

Haskell (その3) Advent Calendar 2017 11日目の記事。(予約投稿知らなかったのでフライングになった) GHCがコンパイルの途中で中間表現として用いるCoreの生成っぷりを観察する。 観察して、あーはいはいなるほどね(わかってない)、と言うだけになりそう。 …

SMLの関数適用を構文解析する時の問題

まだ構文解析器で苦労している。 今回も詰まっているのは構文のconflict。 問題 これが関数適用 app : exp exp これが二項演算子適用 infixapp : exp vid exp この時に入力を x y z とすると2つの解釈ができてしまうことになる。 ((x y) z) とするネストし…

好きなプログラミング言語の好きなところについて思った

改めて最近実感すること。 Haskell, Elm, Clojureほんと好き。 Scala勉強しなきゃなーと思いながらClojureを触ってしまうことが多かったのだけれど、 その理由が少しずつわかってきた。 いい言語たち いままで少しだけ触れてきたJava, Python, Scala, Goはい…

技術書を読む時の問題意識について(答えはまだない)

何か学習したい、と思う動機があるとする。 現在の僕の場合は「仕事の関係でLinuxカーネルについておさえておきたい」とか。 学習したいので何らかの書籍を参照することになる。 問題 読んでいる内容が頭に定着していない感覚 購入した詳解Linuxカーネルでは…

小さく作ることとモチベーション

Minimum viable product - Wikipedia 小さく作りながら進めるのがうまい人は作業ステップの分割ではなくてゴールの分割に優れているなあ、と思う。 最低限のユーザが試すことができる機能のみを搭載したプロダクトをMVP(Minimum Viable Product)というらしい…

仕事で使った言語

僕もまとめておこう。 Java 書いたコードの量はダントツに多い。 リフレクションお化けにハマったり、JavaEEにハマったりした。 いまはJavaに興味なくてJVMに興味が移ってしまった。 JavaScript jQueryが流行ってた頃に一度検索バーの補完用モジュール書いた…

左再帰を含む構文解析むずい

やろうとしていること Haskellのparsecを使ってSMLの構文を解析し構文木を生成する。 やっていること SMLの構文解析はいろいろステップがある。 リテラル (special constants) 識別子 (identifier) 型注釈 !!イマココ!! パターンマッチ 式 宣言 モジュール構…

Standard MLの定義を読み始める

自分の欲しいDSLを作るにあたって、構文として参考になりそうなものを探した結果MLが良いのではとなった。 特にStandard MLが良さそうだ。 OCamlより個人的には素直な文法に感じた。Schemeと違ってTypingもいずれできそうな構文だった。Haskellのようなオフ…

Strongly static types, not for every task なのは何故なんだ

Clojure Rationale このページにこんな文があった。 Pure functional languages tend to strongly static types * Not for everyone, or every task 「静的型付けは全てのタスクに適しているわけではない。」 そのタスクとは何を想定しているのか、ここでは…

ClojureのS式になんでも書けるという話

S式という記法(?)はほんとになんでも書けると知った。 翌日追記: S式というかReaderがすごいっぽい。 例えば (def japanese '(式のなかに 日本語を書くと そのままシンボルになる)) とか (defn 二倍 [x] (* x 2)) とか書ける。 それにmutil line stringも (d…

Haskellerの好きなところ

僕はHaskellが好き。 なんだけど、同じくらいHaskellもくもく会の常連の人達が好き。 ちょっとした型についての質問から、いつの間にかホワイトボード上で証明とか書き出して「あー、ほんとだー、そういうことかー」って言ってる感じが好き。 解らないことが…

Haskellの代数データ型をJava的なインタフェースと捉える

Haskellの代数データ型は僕にとってJavaのインタフェースに近い。 データ型がインタフェースでそのデータを受け取る関数がインタフェースのメソッドに相当する。 データをパターンマッチで分解して値コンストラクタ別の関数定義をするのは、 インタフェース…

Clojureでの副作用の表現について

自分が悩んでることを拙い語彙でぽつぽつ綴るので、誰にも伝わらないと思う。 DBアクセスする機能を実装したいとする。 java.jdbc を使ってDBアクセスレイヤを実装することになるのが普通かなと思う。 Clojureは関数型プログラミング言語なので、組み立てに…