by shigemk2

当面は技術的なことしか書かない

バブルソートの再帰版をJavaScriptで実装した

4話でなんとなく切ったブレイドなんちゃらを見ながらとりあえず実装してみたけど空配列が返って来てげんなりしたバージョン。所要時間30分。

bubble-resursion.2014110300.js

@7shi氏のコメントを受けての修正版。

bubble-resursion.js

後味の悪さが前の番組と同じくらいのアカメを見ながらの修正。

concatがいつも出てこないから最後の詰めを誤るんだ。いい加減覚えよう。

JavaScriptはHaskellと違って副作用があるので、shiftしたやつなどは別の変数に突っ込む必要があるし、配列の取り出しもちょっと調べないと分からない。

HaskellのバブルソートをJavaScriptに直訳してみた - Qiita

今日やったこと 前半 #ikebin

長らくEXEコンパイラをやっていて本業の8086を忘れかけていたので、思い立って出てみることにした。

主目的

逆アセンブラを作りながら機械語の基礎を勉強する(Haskellで)

http://qiita.com/7shi/items/026839b2bc193dbfb0cb

8086について

http://ja.wikipedia.org/wiki/Intel_8086

Intelの16ビットのCPUで第4次スパロボみたいな存在

この基礎にいろいろ継ぎ足していって現在のx86とかがある

いきなり64ビットをやるとかなり難しい

Haskellについて

Haskellをやるのが主目的ではないので、初歩的な機能のみを使って実装する

モナドとかアローとかは使わないよ

2進数

数字の数え方

0と1だけで構成されている

10進数は0123456789

10進数なので位がひとつ上がるごとに10倍

ゆえに、2進数は位がひとつ上がるごとに2倍

110(421) = 6

1100(8421)=12

1が立っている部分に相当する数を足す

再帰を追うコツ

  • 再帰を最後まで追わないで、一段階で仕様を考える
  • 一段階までうまくいけばあとは全部うまくいくはず

数学的帰納法

リンク

http://qiita.com/7shi/items/6887e7939c0168a0eb21

http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE

小並感

  • Haskellは難しい
  • 再帰は難しい
  • プログラミングは難しい
  • 8086を思い出すのが目的だと思っていたけど、新知識が登場して慌てた

shiftLとビット論理和

shiftLは左シフトで、.|.で論理和、というかOR。

Prelude> import Data.Bits
Prelude Data.Bits> (1 `shiftL` 2) .|. (1 `shiftL` 1)
6

なお、Data.Bitsモジュールが必須。

島ぶくろ [Haskell] ビット操作、ビット演算ライブラリ Data.Bits を試してみる。

Pythonで書くとこうかしらね。

>>> (1 << 2) | (1 << 1)
6