2015年9月26日土曜日

CommonLisp の標準機能における繰り返し処理の一覧

参考

Common Lisp Quick Reference

Land of Lisp (書籍) : 日本語訳10章にある Loopマクロ周期表が役に立つ

使用方法については次を参照。
- Lisp入門サイト(そのうちまとめる)
- Hyperspec
- 逆引きCommonLisp の 制御構造のページ

一覧

どれぐらい役割や使い方が簡単に理解でき かの順に並べている

  • dotimes, dolist
  • map系関数 : mapcar, mapc, etc…
  • xx-if, xx-if-not 系関数 : remove-if-not, substitute-if
  • loop (永久ループ)
  • do
  • loop (複雑なマクロ)
  • tagbody と go を用いたループ

これは、、、なかった

  • foreach, each : dolist, loop
  • for : 上記のうちからデータ構造に合ったものを選ぶ
  • foreach-range : OnLisp にある mapa-b など参照
  • while : do, loop で実装, 有志のマクロなども参照

補足

  • 少なくとも上を覚えておくと、ProjectEuler, HackerRank etc… などの回答系サイトでは困らない
  • 同じことを繰り返した結果、面倒になって、OnLispに載っていたマクロを使いだすこと請け合い
  • GoogleによるCL Coding Standard で半推奨的な位置にあるためか、loopマクロをよく見かける。
  • REPLのエラー表示でマクロ展開形にtagbodyが出てくることがある。マクロは自由である。
  • 実際のコードを見てどれが繰り返し処理かを見抜くことは,,,私には少なくとも難しい。
    • APIやデータ構造の把握が先に必要。
  • 書き漏れがあったらまた記事更新する
    • もっと伝わる書き方がわかったら記事更新する

書籍のご案内

Written with StackEdit.

2015年9月13日日曜日

BloggerにMarkdownで記事を書きたいんです

Blogger に Markdownで記事を書きたいんです!!楽なんです!

大切なことなので2回書いた。

StackEdit がその欲求を かなり 満たしてくれる。

特にソースが書きやすい。Blogger のソースコード対応は実際残念

(defun tarai (x y z)
  (if (< x y)
      y
      (tarai (tarai (1- x) y z)
             (tarai (1- y) z x)
             (tarai (1- z) x y))))

うまくいったらごかっさい!

覚書。

  • いきなり公開状態になるようである。要注意。
    • (追記:2015-11-10) YAML Formatter で published: falseを指定することで非公開でアップロード可能
  • タグは当然(?)つかない。つけ方あるかも。
  • 一度アップロードして、タグ付けして、再アップロードはタグに影響なし。
    • (追記:2015-09-26) タグ消えてた。YAML Formatter でつけるのが吉
    • (追記:2015-11-10) YAML Formatter でつければ付け替えも容易
  • 冷静に考えると、新しい記事としてアップロードされるわけではないのだな
    • (追記:2015-09-26) Bloggerの投稿済みページ管理からPostID を見つけ出して指定できる
    • (追記:2015-11-10) StackEdit 経由であれば自動的にID を認識して上書きしてくれる
  • なぜはてなにしなかったのかと今は思う
  • Dropbox との相互syncとあわせると記事管理がはかどる、、、ことを期待
  • markdownで改行すると、アップロードでも改行される。これは少し期待と異なるが許容範囲。

注意点をまとめた記事を書いた。

Written with StackEdit.