<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>マンジラボ &#187; Lisp</title>
	<atom:link href="http://manjilab.com/tag/lisp/feed/" rel="self" type="application/rss+xml" />
	<link>http://manjilab.com</link>
	<description>いわゆる卍研究所。</description>
	<lastBuildDate>Fri, 26 Feb 2010 15:23:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lispで書くときに括弧は見えていない？</title>
		<link>http://manjilab.com/2009/12/19/parenthesis-do-not-matter/</link>
		<comments>http://manjilab.com/2009/12/19/parenthesis-do-not-matter/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 06:44:15 +0000</pubDate>
		<dc:creator>研究所大佐</dc:creator>
				<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TextMate]]></category>

		<guid isPermaLink="false">http://manjilab.com/?p=266</guid>
		<description><![CDATA[Lisp系言語の第一印象は「括弧が多すぎ！」
ある程度Clojureに慣れてから括弧について考えてみると<br />
「あると思えばある、ないと思えばない。」という感覚。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fmanjilab.com%2F2009%2F12%2F19%2Fparenthesis-do-not-matter%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Lisp%E3%81%A7%E6%9B%B8%E3%81%8F%E3%81%A8%E3%81%8D%E3%81%AB%E6%8B%AC%E5%BC%A7%E3%81%AF%E8%A6%8B%E3%81%88%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%EF%BC%9F%22%20%7D);"></div>
<p>Lisp系言語の第一印象は「括弧が多すぎ！」でした。</p>

<p>この括弧の多さが Lispを難解そうに感じさせ、人によっては拒絶反応をおこします。（昔の僕ですが）</p>

<p>しかしある程度Clojureに慣れてから括弧について考えてみると<br />
「あると思えばある、ないと思えばない。」という感覚です。</p>

<p>たとえるなら日本語における「句読点」。また、テキストエディタによってはスペースやタブ、改行を表示できますがアレと同じ感覚です。</p>

<p><a href="http://www.flickr.com/photos/manjilab/4196863312/" title="Lisp indent 考察 by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2714/4196863312_1a7a0087c0.jpg" width="500" height="196" alt="Lisp indent 考察" /></a></p>

<p>構文を見るときに括弧の存在を気にしてはいません。<br />
配置（インデント）で理解しています。</p>

<p>半年前の自分に伝えるならば、上のコードはこう見えていると言うでしょう。</p>

<p><a href="http://www.flickr.com/photos/manjilab/4196108871/" title="Lisp indent 考察 by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2688/4196108871_acc92a7ef6.jpg" width="500" height="196" alt="Lisp indent 考察" /></a></p>

<p>閉じ括弧はエディタがかってに付けるもので、括弧の整合性は気にしていません。
もし間違っていたらインデントが崩れるのですぐに判ります。</p>

<p>閉じ括弧が連続すると何らかの大きなブロックの終わりと感じます。</p>

<p>インデントでコードを理解しているということは、インデントが正しく扱えないと致命的だということになります。</p>

<p>TextMateにてLispのインデントで整形する方法については
<a href="http://manjilab.com/2009/11/13/indent-clojure-in-textmate/">こちら</a>
の記事をどうぞ。</p>

]]></content:encoded>
			<wfw:commentRss>http://manjilab.com/2009/12/19/parenthesis-do-not-matter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lisp風のインデントは見やすいと思う。</title>
		<link>http://manjilab.com/2009/12/19/lisp-style-indentation-rule/</link>
		<comments>http://manjilab.com/2009/12/19/lisp-style-indentation-rule/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 06:12:56 +0000</pubDate>
		<dc:creator>研究所大佐</dc:creator>
				<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Lisp]]></category>

		<guid isPermaLink="false">http://manjilab.com/?p=262</guid>
		<description><![CDATA[Lispをはじめる前はあの独特のインデントに拒否感がありました。
Lisp風のインデントではブロックが視覚的に圧縮されています。
慣れた今となっては見やすくて好きです。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fmanjilab.com%2F2009%2F12%2F19%2Flisp-style-indentation-rule%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Lisp%E9%A2%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88%E3%81%AF%E8%A6%8B%E3%82%84%E3%81%99%E3%81%84%E3%81%A8%E6%80%9D%E3%81%86%E3%80%82%22%20%7D);"></div>
<p>Lispをはじめる前はあの独特のインデントに拒否感がありました。</p>

<p>たとえば
<a href="http://manjilab.com/2009/12/19/elayton-042/">先の記事</a>
のコードを例にとると</p>

<p><a href="http://www.flickr.com/photos/manjilab/4196863312/" title="Lisp indent 考察 by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2714/4196863312_1a7a0087c0.jpg" width="500" height="196" alt="Lisp indent 考察" /></a></p>

<p>のようなインデントです。</p>

<p>同じコードを一般的な言語風にインデントすると</p>

<p><a href="http://www.flickr.com/photos/manjilab/4196877698/" title="Lisp indent 考察 by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2482/4196877698_fcd1fc1977.jpg" width="500" height="338" alt="Lisp indent 考察" /></a></p>

<p>のようになるでしょう。<br />
見慣れたスタイルですがちょっと間延びして見えます。</p>

<p>Lisp風のインデントではブロックは</p>

<p><a href="http://www.flickr.com/photos/manjilab/4196108823/" title="Lisp indent 考察 by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2526/4196108823_75ce0efc75.jpg" width="500" height="196" alt="Lisp indent 考察" /></a></p>

<p>このように視覚的に圧縮されています。</p>

<p>慣れた今となってはこちらの方が見やすくて好きです。</p>

]]></content:encoded>
			<wfw:commentRss>http://manjilab.com/2009/12/19/lisp-style-indentation-rule/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clojure(Lisp)をTextMateで使うときの豆知識。</title>
		<link>http://manjilab.com/2009/12/10/clojure-with-textmate-tips/</link>
		<comments>http://manjilab.com/2009/12/10/clojure-with-textmate-tips/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 02:19:28 +0000</pubDate>
		<dc:creator>研究所大佐</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[TextMate]]></category>

		<guid isPermaLink="false">http://manjilab.com/?p=218</guid>
		<description><![CDATA[Clojure(Lisp)をTextMateで使うときの豆知識。
ささいな事だけど、もし気付いてないと結構めんどくさい思いをします。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fmanjilab.com%2F2009%2F12%2F10%2Fclojure-with-textmate-tips%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Clojure%28Lisp%29%E3%82%92TextMate%E3%81%A7%E4%BD%BF%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AE%E8%B1%86%E7%9F%A5%E8%AD%98%E3%80%82%22%20%7D);"></div>
<p>ささいな事だけど、もし気付いてないと結構めんどくさい思いをします。</p>

<p>TextMateは改行時やコードをペーストした時に自動でインデントしてくれるのですが。いこれが余計に感じるケースがあります。</p>

<p>例えばインデントが開いたまま改行すると</p>

<p><a href="http://www.flickr.com/photos/manjilab/4172241381/" title="Tips to use Clojure(Lisp) with TextMate by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2741/4172241381_f672d45a44.jpg" width="500" height="420" alt="Tips to use Clojure(Lisp) with TextMate" /></a></p>

<p>こうなります。まあこれが普通なんだけど、行頭に移動したい場合もある。</p>

<p>そんなときは
&#x2325;&#x21e7;&#x21a9; (Option + Shift + Return)</p>

<p><a href="http://www.flickr.com/photos/manjilab/4172241313/" title="Tips to use Clojure(Lisp) with TextMate by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2593/4172241313_455c3ff86d.jpg" width="500" height="420" alt="Tips to use Clojure(Lisp) with TextMate" /></a></p>

<p>で可能。</p>

<p>ここまでは普通の言語でもよくある話。</p>

<p>Lisp系言語ではコーディングルールが独特で、最後にまとめて括弧を閉じてしまうことが多いです。</p>

<p>その場合にTextMateが、（Rubyなどの場合と違って）「ブロックが閉じているかどうかを無視して直前の行のインデントにならう」のが問題。</p>

<p>たとえば、カーソルが行頭にあったとしてもペースト時に</p>

<p><a href="http://www.flickr.com/photos/manjilab/4172241517/" title="Tips to use Clojure(Lisp) with TextMate by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2688/4172241517_b09f9cbbb8.jpg" width="500" height="500" alt="Tips to use Clojure(Lisp) with TextMate" /></a></p>

<p>と直前の行にならってしまう。</p>

<p>こういう場合は
&#x2303;&#x2318;V (Control + Command + V) を使うと</p>

<p><a href="http://www.flickr.com/photos/manjilab/4172241465/" title="Tips to use Clojure(Lisp) with TextMate by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2531/4172241465_681523dfc5.jpg" width="500" height="500" alt="Tips to use Clojure(Lisp) with TextMate" /></a></p>

<p>このようにカーソル位置に則したインデントでペーストをしてくれます。</p>

<p>このショートカットに気付いてからTextMateでClojureのコードを書くのがかなり楽になりました。</p>

<p>あれ・・・？ インデントといえばPythonもそうじゃん。<br />
これって多くのPython使いの人は知ってたの？<br />
ひょっとしてTextMateの常識だった？</p>

]]></content:encoded>
			<wfw:commentRss>http://manjilab.com/2009/12/10/clojure-with-textmate-tips/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TextMateでのClojureのインデント解決編</title>
		<link>http://manjilab.com/2009/11/13/indent-clojure-in-textmate/</link>
		<comments>http://manjilab.com/2009/11/13/indent-clojure-in-textmate/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 22:31:12 +0000</pubDate>
		<dc:creator>研究所大佐</dc:creator>
				<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[TextMate]]></category>

		<guid isPermaLink="false">http://manjilab.com/?p=83</guid>
		<description><![CDATA[TextMateでのClojureのインデントをなんとかしてみる話。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fmanjilab.com%2F2009%2F11%2F13%2Findent-clojure-in-textmate%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22TextMate%E3%81%A7%E3%81%AEClojure%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88%E8%A7%A3%E6%B1%BA%E7%B7%A8%22%20%7D);"></div>
<p>TextMateでのClojureのインデントをなんとかしてみる話。</p>

<p><a href="http://macromates.com/">TextMate</a>はLispスタイルのインデントに対応していない。<br />
でもそれ以外ではとても使いやすい。</p>

<p>Snippetは便利だし、コマンドを拡張するにも言語を選ばない。<br />
シェル上で動かせる言語ならokという懐の深さ。</p>

<p>使い慣れたRubyとかでチョイチョイとカスタマイズできるのです。<br />
emacsだと拡張するのにemacs-lispしか選べないので敷居が高い。</p>

<p>できればTextMateでClojureしたいのだけど、インデント問題を解決しないことには使い続ける気になれない。</p>

<p>実際emacsのclojure-modeを使ってインデントしてみるとなんか説得力ある。<br />
「なにが2タブだ！clojure-mode こそがコーディングルール！」と言わんばかり。</p>

<p>つまり先日の
<a href="http://manjilab.com/2009/11/11/project-euler-001/">Project Euler #001</a>
はホントはこうだったわけだ。</p>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span>reduce +
        <span style="color: #66cc66;">&#40;</span>distinct
         <span style="color: #66cc66;">&#40;</span>concat
          <span style="color: #66cc66;">&#40;</span>range <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">1000</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>range <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">1000</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>


<p>インデントをちゃんとしないと献コードとかに参加させてもらえなかったり、京都あたりでは近所の人に笑われるかも知れないのでなんとかしてみる。</p>

<p>インデントのルールがよく判らないのでclojure-modeに整形してもらう方向で。<br />
コマンドラインからemacsを通して整形できることを確認。</p>

<p>あとはrubyスクリプトにしてTextMateに登録してみた。</p>

<p>コードはgistにアップしておいたので興味のある方はご自由にどうそ。</p>

<script src="http://gist.github.com/233171.js"></script>

<p>(required: emacs and clojure-mode.el)
clojure-mode のパスをインストールした場所に変更すれば動くと思う。</p>

<p>TextMateのバンドルエディタで適当なところに登録して好きなホットキーを割り当てれば準備オーケー。</p>

<p><a href="http://www.flickr.com/photos/manjilab/4097992719/" title="Tidy up clojure code in TextMate by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2773/4097992719_044a7e2e8a.jpg" width="500" height="347" alt="Tidy up clojure code in TextMate" /></a></p>

<p>実行すると選択範囲した部分（選択していないときは全域）を整形してくれます。</p>

<p><a href="http://www.flickr.com/photos/manjilab/4098184601/";; title="Lisp/Clojure style intentation with TextMate by manjilab, on Flickr"><img src="http://farm3.static.flickr.com/2504/4098184601_1df6857737.jpg";; width="500" height="225" alt="Lisp/Clojure style intentation with TextMate" /></a></p>

<p>快適〜♪</p>

]]></content:encoded>
			<wfw:commentRss>http://manjilab.com/2009/11/13/indent-clojure-in-textmate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TextMateはLisp系言語には不向きか？</title>
		<link>http://manjilab.com/2009/11/13/textmate-is-not-suitable-for-lisp/</link>
		<comments>http://manjilab.com/2009/11/13/textmate-is-not-suitable-for-lisp/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 21:50:22 +0000</pubDate>
		<dc:creator>研究所大佐</dc:creator>
				<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[TextMate]]></category>

		<guid isPermaLink="false">http://manjilab.com/?p=79</guid>
		<description><![CDATA[TextMateはすばらしいエディタなのですが、Lispスタイルのインデントに対応していないのが玉にキズなのです。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fmanjilab.com%2F2009%2F11%2F13%2Ftextmate-is-not-suitable-for-lisp%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22TextMate%E3%81%AFLisp%E7%B3%BB%E8%A8%80%E8%AA%9E%E3%81%AB%E3%81%AF%E4%B8%8D%E5%90%91%E3%81%8D%E3%81%8B%EF%BC%9F%22%20%7D);"></div>
<p>さきほどから clojure.contrib のソースファイルを読んでいるんだけど<br />
インデントの方法が作者によってまちまちなのに気付いた。</p>

<p>2タブ設定にしてあるTextMateで開くとインデントが崩れる。<br />
タブ（8スペース）を使っている人がけっこう多いようだ。<br />
全部スペースでインデントしている人は少数派か。</p>

<p>おそらくemacsなどの自動インデントと使っているんだろうな。</p>

<p>確かにこのインデントのしかたは読みやすい。</p>

<p>あれ？ さっそく
<a href="http://manjilab.com/2009/11/10/clojure-coding-guideline/">コーディング規約</a>
が怪しくなってきましたよと。</p>

<p><a href="http://macromates.com/">TextMate</a>
はすばらしいエディタなのですが
Lispスタイルのインデントに対応していないのが玉にキズなのです。</p>

<p>本家に要望としてあがっているようですが対応してくれる気配がない。
それ以外ではとても使いやすいエディタなのになぁ。惜しい。</p>

<p>でもLisp系はどういうルールでインデントしているのか判りにくいので手動でインデントすると間違えそう。<br />
ソースを変更した際の自動再インデントも必須になってくるし。</p>

<p>このままじゃ他人とソースの共有しづらいなぁ。<br />
うーん。どうしたものか。</p>

]]></content:encoded>
			<wfw:commentRss>http://manjilab.com/2009/11/13/textmate-is-not-suitable-for-lisp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
