tkykmw code

学びたいことを学ぶ

アンダースタンディング コンピュテーション 6.1.11.2 再帰なしRANGEの弱点

本文には書いていない点。 再帰なしのMODが0除算に対して異なる結果を返すのと同じように、再帰なしのRANGEも元と異なる結果を返す場合がある。 値の範囲の大小を入れ替えた場合、再帰版は空のリストを返すのに対し、再帰なし版は終端の値を含む要素1のリス…

アンダースタンディング コンピュテーション 6.1.11.1 MULTIPLES_OF 別解

倍数の無限ストリームMULTIPLES_OFの別解。 MULTIPLES_OF = -> m { Z[-> f { -> c { UNSHIFT[-> x { f[INCREMENT[c]][x] }][MULTIPLY[c][m]] }}][ONE] } 数列として表現するなら だから、この方が素直だと思う。さらに、この構造を見れば、実はMAPとUPWARDS_…

アンダースタンディング・コンピュテーション6.1.10まで

後半、説明が飛ばし飛ばしでややわかりにくいので、補足を試みる。 リストの作り方 PAIRが入れ子になっていることへの説明がないので、混乱する。要は、リストの一つの要素を、3つのフィールドで構成しているのだ。 リストの末尾かどうか判定するフラグ 値へ…

プログラマ的な発想でExcelを使うときに必要な機能

(Excelといいつつ使っているのはGoogle Spreadsheetだが、どちらも共通して使えるはず) Excelは計算式をコピーしたとき、セル参照を自動で割り当てなおしてくれる。 しかしプログラマ的には、自動割り当てではまったく物足りない、セルの位置など踏まえて…

Yコンビネータによる無名再帰をRubyで理解する

アンダースタンディング コンピュテーション180ページでは、Yコンビネータ(Zコンビネータ)によって無名再帰を実装している。 が、詳しい説明が省かれているので、Wikipediaの不動点コンビネータの例をRubyで書いて理解してみる。 まず普通に再帰を使って、…

アンダースタンディング コンピュテーション 5章

5章。DFAからプッシュダウンオートマトンを経て、ついにチューリングマシンへ到達。 ここまで来ると、かなり自由な発想で規則を設計できるようになり、なるほど普通のプログラミング言語と通底する存在だとうなずける。 たとえば156ページで紹介されている、…

アンダースタンディング コンピュテーション3章のNFA/DFAをGraphvizでビジュアル化

せっかく正規表現→NFA→DFAと変換できるようになったんだから、グラフ図(状態遷移図)で見たいよね、というわけで定番のGraphvizを使ってビジュアル化してみた。 Graphviz用のRubyライブラリはいくつも存在するようだが、どれも用途に合わなかったので、自作…

アンダースタンディング コンピュテーション 4章の感想とか

第4章。プッシュダウン・オートマトン。 実行中に拡張可能なワーキングメモリがあれば、できることが増える。これはプログラミングに対する素朴な実感にもあっていて、納得感があった。初めてC言語を勉強したあの日、malloc を覚えて、初めてやりたいことが…

アンダースタンディング コンピュテーション 3章の感想とか

「単純なコンピュータから始めましょう」という導入で有限オートマトンが出てきて、しばらくはどういう展開につながるかわからないので、かなり面食らった。 3章全体が、最終的には「正規表現を作る」という形で、実用的な成果に至ることを押さえておけば、…

写経のお供にfilewatcher gemを使う

プログラミング本の写経をするとき、今までREPLコンソールで確認していたのだが、ファイル監視ツールで常時実行させた方が、はるかに快適だと気付いた。 filewatcherはRuby製だけど、特に言語を問わず汎用的に使用できるツール。 src/ または spec/ 以下のフ…

Ubuntu on WSLでgit cloneが動作しない

環境: Ubuntu 16.04.4 LTS Windows 10 直接 git clone https://example.com を叩けばうまくいくのだが、シェルスクリプトやvimプラグイン(NeoBundleおよびdein)経由で実行すると、git-remote-http がハングアップして動作しない。 原因はUbuntuの /bin/sh …

RubyのStructを継承して、共通の振る舞いを追加する

Struct.new の戻り値は Struct のインスタンスではなく、サブクラスである。 Person = Struct.new(:name, :age) Person.is_a?(Struct) #=> false Person < Struct #=> true しかし「 new によってサブクラスが作られる」という振る舞いそのものは継承されな…

WordPressで特定のカテゴリーの投稿のみエクスポートする

Webの管理画面「エクスポート」から実行すると、添付ファイルがエクスポートされない。 [caption id="attachment_36" align="alignnone" width="812"] これだと添付ファイルが含まれないのでダメ[/caption] 添付ファイルも含めエクスポートするには、WP CLI…

Windows 10でEmacs風キーバインドを使う

Mac OSと同じように、WindowsのGUI全般でEmacs風キーバインドを使えるようにする。 AutoHotkeyというツールを使用するのが、最も安定していてよさそうだ。 私は親指シフトの「やまぶきR」とも併用しているが、問題なく使用できている。 AutoHotkeyとは AutoH…