Programmer's Note

コード読み書きの備忘録。

teensy 3.5でbare metal programmingことはじめ

ちとベアメタルプログラミングしたくなって、いい感じのマイコンボードないかと探していたら、teensyというのが、ARM Cortex-M4を使っていて手軽そうだったので購入してみた。 DEV-14055 Teensy USB Development Board - Teensy 3.5 標準ではArduino IDE環境…

Haskellでミニマムな正規表現のmatch関数を実装してみる

「ビューティフルコード」(オーライリー・ジャパン)のしょっぱなの章で、 カーニハン先生がロブ・パイクさんのミニマムな正規表現のmatch関数のソースコードを紹介していた。 たった30行ほどのC言語コードで、下記正規表現をサポートする。 文字 意味 c …

続:Haskell/Clojureでrepeated_combinationを実装してみる

http://hifistar.hatenablog.com/entry/2018/03/24/131654:repeat_combinationを実装してみるの続き。 この前書いたコードは結構無駄が多くて、実はもっとぜんぜん簡潔にコードが書けた。 ここまで簡潔なコードにブラッシュアップできたのは、Haskellのおか…

Clojureで日付の計算をする

引き続き「プログラマ脳を鍛える数学パズル」の問題を解いて遊んでいる。 第7問は日付を扱う。 問題自体は簡単なのだが、Clojureでの日付の扱い方がよく分からなくて、調べるのに時間がかかった。 clj-timeというライブラリがあるようだが、わざわざな・・・…

Haskell/Clojureでrepeated_combinationを実装してみる

前回やった Haskell/Clojureで数学パズル:コインの両替 - Programmer's Note の問題5は、書籍の解答例のひとつに、Rubyのrepeated_combination()を使った解があった。 こいつは任意の回数、配列の要素の組み合わせを出してくれる関数で、 探せばClojure/Has…

Haskell/Clojureで数学パズル:コインの両替

いやあ「プログラマ脳を鍛える数学パズル」楽しいですわ。 まだ5問しかやっていないけど、Clojure/Haskell両方で解いているので、一粒で二度美味しい。 しかも、解説は違う視点の解法を示してくれるので、3度も4度も美味しい感じだ。 5問目は、お金の両替…

Haskell/Clojureで数値をN進数表記に変換

去年からHacker Rankが面白くてハマっている。 今年に入ってからHaskellを始めたので、ますます関数型プログラミングでアルゴリズムをやりたい気分が上がっている。 アルゴリズム勉強したいなと思い、 有名なKnuth先生の「The Art of Computer Programming」…

Haskellの勉強をはじめる

今年に入ってからHaskellを勉強し始めた。これが結構楽しい。教科書は「Programming in Haskell」。(この本は名著だ) 読み進めてコードを書いてみるにつれ、最初の想像と違って、かなりLISPに近い印象を受ける。ラムダ計算がベースなので、そっくりなのは当…

Clojure: cond-> の使い所

久々のブログ更新だ。 いやはやClojureが楽しくてしょうがない。 特に何か作っているわけではないが、 ここ3、4ヶ月はHackerRank (https://www.hackerrank.com/) にハマって、パズル解く感覚でClojureを使って問題を解いて遊んでいた。 LISP言語はアルゴリ…

Vimにneosnippetを導入

SICPのexerciseをやっていると、例えば(ns …)の宣言など定型的な部分は、snippetがあると便利だなーと思う。 探してみたらvimのpluginで定番のneosnippetがあった。 GitHub - Shougo/neosnippet.vim: neo-snippet plugin この動作にはneocompleteが必要だっ…

[SICP] SICP第2章読了

第2章の最後の課題は残しているが、読了した。データの抽象化の威力をまざまざと見せられた。 なんといってもこの章のクライマックスの多項式の演算プログラム。 データの型およびClojureでいうマルチメソッドのシステムを自前で用意して、実にエレガントに…

mapのループをforで表現する

前回(mapと再帰で木構造を扱う - Programmer's Note)は、mapと再帰で木構造を扱う処理を書いたが、mapはシーケンスを順になめていく高階関数であって、いわゆるコレクションを扱うfor文と変わらない。 Clojureにもforマクロは用意されていて、かなり表現力…

mapと再帰で木構造を扱う

SICP楽しすぎるな。 第2章の途中、mapを使って木構造のデータ処理を紹介していて、えらく感動した。 題材は以下のとおり、木構造の中の全要素に対して任意のfactorを掛ける関数scale-treeを作ること。 (def ttree (list 1 (list 2 (list 3 4) 5) (list 6 7)…

recordを使ってデータ構造をつくる

SICPまじ楽しいな。この本は、一読して内容を理解するだけじゃなくて、手を動かしてコードを写経したり練習問題をやると、純粋にプログラミングの楽しさを味わえる。本質的な部分(パラダイム)を濃密に扱っているので、数学と一緒で、手を動かして思考を追…

SICP第一章読了

SICP第1章を読了した。演習問題もコンプリート! 言語はSchemeではなくClojureを使ったのでClojureのいい練習にもなった。 振り返ると、プログラミングの教材として、構成が実によく考えられていて感動すら覚える。 一級品の少年漫画やRPGなみのストーリー…

Clojureでパスカルの三角形

SICP遅々と読む。練習問題にパスカルの三角形の要素を計算せよ(再帰を使って)、というのがある。 フィボナッチ数列の次くらいに手軽な題材でいろいろ試せて遊べるなと。 Clojureらしい解き方は、やっぱ遅延シーケンスを作るやり方だろうなと。 出力形式は…

続Clojureのdestructuringメモ

前回「 Clojureのdestructuringメモ - Programmer's Note 」の続き。 マップのdestructuring 文字列をキーに使った場合を試す (def mab {"a" 1 "b" 2}) (let [{:strs [a b]} mab] (println b "," a)) ; 結果 => 2,1 Goood!! 下記非短縮形もOK。 (def mab {"a…

Clojureのdestructuringメモ

Clojureのdestructuringはベクターやmapの中から要素を取り出すのに、とても便利な機能。 さて、Clojure - Destructuring in Clojureに書いてあることなのだが、手を動かして確かめてみる。 使えるところ 関数 (defn foo [] (...)) 無名関数 (fn [] (...)) l…

世界観と世界を変える一冊

ほぼ一年ぶりの更新か^^; さて、「7つの言語7つの世界」を読了。一通り全言語のエッセンスは学べたかな。(Prolog , Haskellは最後はちょっと飛ばしたが、もう少し知りたい時に読めばいいかなと) 章順ではなく気になる言語から読んでいって、途中ブランクがだ…

RubyとLispとClojureのコードの読みやすさ

「なぜRubyは許容可能なLISPなのか - 翡翠はコンピュータに卵を生むか」という記事が面白かった。 この記事の中でサンプルコードを使って、 プログラムの読みやすさを対比させていた部分があったので、 Clojureでやってみたくなった。 Ruby [1,2,3].map {|n|…

データ指向 (Data Orientation)

Clojureを設計したRich Hickeyさんのプレゼン Clojure Made Simple - YouTube を観た。 特に印象的なのは、Clojureを作るきっかけになった経緯を語ったくだり。 簡単にいえば、20年間Java/C++/C#でエンタープライズ系のソフトウェアを組んできたキャリアのあ…

Clojureの危険性

Clojureを始めたきっかけはPaul Grahamの「ハッカーと画家」を読んでだった。 この本はそれこそ情熱的なLisp啓蒙本と言っていい。 言語仕様はまったく紹介されてないにも関わらず、何だかLispのすごさだけは伝わってきた。 感化され「ANSI Common Lisp」「On…

vimにlightline導入とvim-powerlineフォントパッチあてる

今月号のSoftware Designのvim特集を読んでいたら、ちょっとvim熱が上がった。 あましごりごりカスタマイズして使ってこなかったが、少しカッコよくしようかと。 vim-airlineてやつを思い出して使おうと思ってググってたら、lightlineというのが良さそうなの…

Clojureの標準入力とファイル読み込み(文字列カウント)

ファイルのリードと標準入力の扱いのメモ。 「プログラミング言語C」の例題にもあるword count的なものを作ってみる。 ソース leiningen環境にて $ lein new app t_stdin とやったあとにsrc/t_stdin/core.cljを編集。 (ns t-stdin.core (:require [clojure.j…

Clojureの楽しい入門書

いやあClojure楽しす。 "Clojure for The Brave and True" (紙本)を購入して読んでいるのだが、この本はすばらしいね。 ノリが軽いが、内容はよく整理されていて、構成がしっかりしている。 あとから目次頼りにリファレンスとしても使える。著者の奥さんのイ…

ClojureとSwingでボール落ちるアニメーション

ClojureからSwingを使って簡単な描画アニメーションを試してみるテスト。 ClojureはJavaの世界をかなり透過的にたたけるが、書き方のパターンさえ覚えてしまえば、コード量が全然少なくなるので、はっきり言ってJavaで書くよりラクだ(笑)。 とりあえず、上…

Clojureでjavax.swing.JFrameを使ってみる

Clojureからjavax.swingを使い、GUIプログラミングをかじり始めつつ、Javaのメソッド呼び出しのやり方も練習もする。 Javaメソッドの呼び出し方 例えば、文字列Helloの長さを返す。 repl=> (.length "Hello") 5 これはJavaで"Hello".length()を呼びだしたと…

fireplace使用メモ

vimでClojureの開発が便利になるプラグイン vim-fireplace を導入してみた。 インストール 参照したサイト: http://blog.ieknir.com/blog/beginning-clojure-with-vim/ 自分はNeoBundleを使っているので、以下の2つのプラグインを.vimrcに追加しただけ。 c…

Clojureのプログラミング本とか

先週あたり、ひととおり「プログラミングClojure」を読み終えた。 この本は正直、分かりやすくない。 用語が統一されてない部分があったり、用語の説明がいまいち足りなく、 ネットで検索せんといかんかったり。 サンプルコードも面白い訳でもなく、かといっ…

Clojureメモ: 再帰を使うとか使わないとか

再帰呼び出し。 練習がてら下記のような関数を作ってみる。 (myfunc 5 []) => [1 2 3 4 5] 考え方としては、 (myfunc 5, []) -> (myfunc 4, [5]) -> (myfunc 3, [4 5]) -> (myfunc 2, [3 4 5]) ... -> (myfunc 0, [1 2 3 4 5]) => 最後に[1 2 3 4 5]を返す …