Programmer's Note

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

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]を返す …

Clojureメモ: マクロの動き

マクロの使い方覚え書き。 まず、「プログラミングClojure」に出ていたノーマルな定義。 unlessというマクロ。 (defmacro unless [expr form] (list 'if expr nil form)) 実行結果 t-macro.core=> (unless false (println "1")) 1 nil t-macro.core=> (unles…

vimrcメモ(clojure用plugin設定)

vim

vimrcメモ。 Clojureのための設定も追加。 set nocompatible set runtimepath^=~/.vim/bundle/neobundle.vim/ call neobundle#begin(expand('~/.vim/bundle/')) NeoBundleFetch 'Shougo/neobundle.vim' NeoBundle 'guns/vim-clojure-static' NeoBundle 'kien…

Clojureメモ: loopとrecur

プログラミングClojureに乗っていた例を写経実行したメモ。 関数を使わずに、再帰的にループするやり方。 (println (loop [result [] x 5] (if (zero? x) result (recur (conj result x) (dec x))))) 実行結果: [5 4 3 2 1] ループ分の構造としては (loop […

Clojureメモ: 無名関数

「プログラミングClojure」で出てきたサンプル。 user=> (filter (fn [w] (> (count w) 2)) (str/split "A fine day" #"\W+")) ("fine" "day") filter関数は、 (filter pred coll) コレクションcollの各要素に対して、条件をチェックする関数predを適応して…

Clojureメモ: 遅延評価

さて、(for ...)はシーケンスを生成して返すが、これは遅延評価されるので、実際に使用されるまではシーケンスは生成されない。 REPL環境だと入力した式がその場で評価されるので、これが遅延評価されるものとは気づかない。 user=> (for [x (range 1 3)] (p…

Clojureを遊ぶ:括弧とか

「プログラミングClojure」で出てきたforループのサンプル。 (defn indexed [coll] (map vector (iterate inc 0) coll)) (defn index-filter [pred coll] (when pred (for [[idx elt] (indexed coll) :when (pred elt)] idx))) 実行結果: (index-filter #{\…

Clojureメモ:forを使う(その2)

まずは、2次元配列的なものを作ってみる。 user=> (def aa [[1 \a] [2 \b]]) #'user/aa user=> aa [[1 \a] [2 \b]] これを、一個ずつ取り出してみる。 user=> (for [x aa] (println x)) [1 a] [2 b] (nil nil) で、上記[1 a]、[2 b]の第1要素だけをとりた…

Clojureメモ:forを使う

Clojureを始めて1週間ちょいといったところか。 とりあえず本を読んでいる、ちょくちょく試してみている感じ。 ループのまわし方とかも、手続き型プログラミングと勝手が違って戸惑う。 ※Clojureのforは命令型言語のforループとは違うらしい。(リスト内包表…

Clojureメモ:文字列分割

「プログラミングClojure」を読んでClojureを学んでいる。 正直、この本は入門者向けではない…。著者の気持ちが先走りすぎている。 いやいや、面白いのは分かるけど、もうちょっと落ち着いて教えてくれよ。という感じだ。 まあ謎解きしながら読むのも面白い…

Clojureを遊ぶ:リストとマクロ

「7つの言語7つの世界」 を読んでClojureを始めた。 まったく思考がLISPerになってなく、すらすらプログラムが組める状態ではない。が、実に面白い。 Clojureの強力な点は、コレクションに対する操作を、非常に簡潔に書けるところだ。 まずはリスト。 リス…

マコネル本の読書

遅ればせながら、最近やっとCode Completeを読んだ。まだ上巻を読了したばかりだが、この本がこんなに面白いとは思わなかった。ずいぶん前に買って積んでいたが、言わば食わず嫌いだったな。なぜかって一言で言えばMicrosoft Pressだから。 この本は名著とも…

sicpの導入部

MITのプログラミングの授業で使われていた伝説的な教科書、「Structure and Interpretation of Computer Programs」、略してsicpを読み始めた。 いわゆるプログラミングの古典的名著として数えられ、「ハッカーと画家」のポール・グレアムもAmazonレビューで…

vimrcメモ

vim

vimrcメモ。 プラグインも色々入れていたが、使用頻度が低いので思い切って削って、とりあえず必要最小限のものだけを残してみた。 運用していくうちにまた増えたりするかもしれんが。 だいたいがネットで検索した設定をコピペして、ミックスした感じだが。 …

yacc を遊ぶ:パーサーの動き確認

「THE UNIX PROGRAMMING ENVIRONMENT」のチャプター8のhocをサンプルに、yaccのパースの動きを確かめてみる。 この本では、hoc4でパーサーからインタプリタコードを生成するステップに移るが、 生成すべきコードとの結びつきがイマイチ想像できんかったから…

「The UNIX Programming Environment」読了

「The UNIX Programming Environment」読了。1月からコツコツ読んで足がけ4ヶ月。正確には第9章を残しているが、第9章はtroffの紹介で、これはまあ気が向いたら読めばよいかなと思っている。文章整形は1980年代からはもはや隔世の感がありすぎる。恐らく今後…

ハッカーと画家: 言語の力

ちょっと衝撃を受けた。 昨日読み始めたポール・グレアムの「ハッカーと画家」、これはすごい本だ。 結構前に、Matzさんの以下の記事で知ったのだが、 まつもとゆきひろのハッカーズライフ:第3回 ハッカーと仕事 (2/2) - ITmedia エンタープライズ ずっとブ…

Joel on Software読み始める

最近 Joel on Software を読み始めた。 以前、書店でぱらぱら見たときは面白そうに見えなかったが、Kindleで原書のお試し版を読んでみると、楽しいではないか。とても平易な英語で読みやすい。 ということで、原書のペーパーバック古本をAmazonで購入。すこ…

awk / yacc / lex

いかん、忙しさにかまけて更新が滞っている・・・。 さて、コンスタントに読んでいる「The UNIX Programming Environment」は、第6、7章が終わり。8章に入っている。 yaccで簡易計算言語の作成だぜ。さすがはKernighanさんとPikeさん、yaccがこんな風に楽…

The UNX Programming Environment 5章、6章

The UNIX Programming Environmentも、第5章を過ぎて、第6章の「PROGRAMMING WITH STANDARD IO」の終わりに差しかかってきた。 UNIX精神というはつまり、過去の資産を最大限に活用すること、多様性を賞賛すること、なのだなと改めて読んでいて思った。この…

簡単なcalculatorコマンドを作ってみる(Ruby)

たまーにさくっと計算機欲しいときがあるけど、UNIX標準のbcってクセがありすぎて辛い。 探してもシンプルなcalculatorコマンドってないもんだなと、、、。 やりたいことは、単純で $ calc 1024*24-54 24522 0x5fca 057712 結果を、10進、16進、8進て表…

エスケープシーケンスでカーソル移動を使ってみる(Ruby)

ちょい前にエスケープシーケンスで文字装飾を試した。(エスケープシーケンスの文字装飾を試す - Programmer's Dialy) さて、今回はカーソル移動を試してみたい。 (ちょっと文字列処理が入るのでRubyで) Kernighan先生の「Software Tools」の中で、フィル…

Rubyのevalと正規表現で簡単にデータを取り込んでみる

Rubyのeval()を使ってみる。これを使えば、 ファイルから読み込んだ文字列データを、そのままRuby処理系に渡して解釈できる。 今回は、例えば適当に定義したデータ形式のファイルから、 hashテーブルとして読み込むところをやってみたい。 データは例えば下…

vimで単語の置換を一発でやる関数を作ってみる

vim

vimを使い始めて2ヶ月ちょっとか。感覚的には半年くらい使ってる気がするな。 もはや日々の仕事に欠かせないツールになっている。 プラグインの方もも欲しいと思ってたものをいくつか入れて、IDE相当なリッチな環境になってきた。 プラグインも各々使いこな…

shプログラミング覚え書き

shって使いこなせばかなり便利だな。プログラミング言語としても面白い。(※注:Bourne Shell系のshell) 「The UNIX Programming Environment」の第5章の"SHELL PROGRAMMING"を読んでいる途中だが、 いろいろおさらいしときたいTIPSがある。 とありえず手元…

Software Constructとベナー看護論

The Pragmatic Bookshelfのサイトを歩いてたら… 「達人プログラマー」のAndy HuntとDave Tomasが、IEEEに連載してたコラムの一覧が出てきた。IEEEにコラムを書いていたのか、知らんかった。 参照:The Pragmatic Bookshelf | IEEE Articles IEEEて名前だけ知…

とりあえず、目に付いた読みたい記事、本のリスト。

なんとなく面白そうなサイト: Bob Morris 書評とか載ってるっぽい Web記事: http://thinkfaster.co/2015/02/so-you-want-to-be-a-developer-rockstar The Programmer’s Price - The New Yorker 本: The Pragmatic Bookshelf | The Healthy Programmer The…

Dwarf Fortressちょっとやってみる&フォントを変えてみる

ちと電子回路系の英語本が読みたいと思って、ネットで推薦されてたGetting Start in Electronicsを探してたら、 (参照:Getting Start in Electronics) たまたまドット絵の表紙が目についた。→ Getting Started With Dwarf Fortress ぐぐると、なんだこれ…

Zork Iをプレイしてみる

なんとなく英語のテキストアドベンチャーをプレイしたくなった。 文字だけのゲームは読書の延長線上で、なんとなく面白そうだ。 テキストアドベンチャーって、いままでまったくプレイしたことはない。 コンソール機とかにも出ているが、なんか単にいくか示さ…

エスケープシーケンスの文字装飾を試す

エスケープシーケンスを試してみる。 カーソル移動も可能だが、とりあえず文字表示の装飾機能を試す。 文字装飾エスケープシーケンスは、C言語だとprintfで\x1b[制御コードmを出力すればいい。 制御コードは1〜107まであるらしい。0はリセット。 (参照:ANS…

bundleプログラム改

'The Unix Programming Environment'の第3章の「USING THE SHELL」で bundle というツールが紹介されている。 これは以下のような小さなshellスクリプトのプログラムだ。 (作ったのはAlan Hewett, James Gosling.) #bundle: group files into distributio…

Rubyでバッファリングなしのキー入力を試す

Rubyでバッファリングなしのキー入力読み込みを試す。 普通の標準入力の getc を使った場合は、 入力された文字はターミナルに出力されつつ、バッファリングされて、 Enterが押されて初めて文字列がプログラムに送られる。 例: ソース: t_getc.rb while c =…

Rubyでクロージャのテスト

以前、Swiftでもjavascriptでも試したクロージャを、Rubyでもやってみた。 つい今日覚えたlambdaを使って。 以下コード: def func_generator() a = 0; return lambda { a += 1 } end f_add = func_generator puts f_add.call puts f_add.call 出力: 1 2 参…

Rubyのlambda使用メモ:ハッシュテーブルに関数を入れて別の関数に渡す

Rubyでjavascriptっぽく、ハッシュテーブルに関数の定義を入れて、 別の関数に渡すてのをやってみた話。 javascripは便利で、関数=オブジェクトというところが分かってしまえば、 かなり何でもできてしまう(記述の自由度が高い)。 なにかしら構造体的なも…

echoについて

KernighanさんとRob Pikeさんの著書、 'The Unix Programming Environment'の第3章の「USING THE SHELL」にechoコマンドの話が出てくる。 echoコマンドはおそらくコマンドの中で一番シンプルな部類に入る。 このコマンドの仕事は「引数を標準出力に出力する…