SKILL++とは
ボクの嫌いな言語No.2にランキングしているSKILL。理由は、せっかくのきれいなLispなのに、C言語風のコードが書けたり、CamelCaseを推奨しているところ。もちろん、それ以外に仕事的な理由もありますが、それはまたの機会に。
しかしながら、Cadenceもその辺はある程度理解しているのか、SKILL++と言うのも用意している。しかし、SKILL嫌いのせいで調べることもほとんどしなかったけど、とある人から指摘されてしまったので、少し調べて見ることにする。
と言っても、CadenceのBlog
http://www.cadence.com/Community/blogs/cic/archive/2011/01/04/skill-for-the-skilled-what-is-skill.aspx
を見てるだけだけど。
そういえば、SKILLをスタンドアローンで動かすことってできないの? > Cadenceさん
特徴
Lisp-1と言うのはあまり知らなかったけど、Matzさんのブログに詳しく書かれているので割愛w
基本的に名前空間が一つしかないLispのことをLisp-1と呼ぶ。たとえばSchemeがそう。
http://www.rubyist.net/~matz/20080201.html#p01
とりあえず、変数と関数が同じ名前空間に属している、と言うことですね。Pythonもそうらしいですね。そういえば、関数を普通に変数に代入できたりします。Rubyは単一名前空間じゃないから、ブロックで囲んでやって、変数に渡さないといけない。
さて、この3つの特徴を見ていると。。。これってScheme?と思ってしまいますね。実際、CadenceのBlogでも
In this article, we'll ignore the SKILL++ object system and concentrate on the first two of these capabilities -- sometimes referred to jointly as the SKILL++ Scheme Dialect.
http://www.cadence.com/Community/blogs/cic/archive/2011/01/04/skill-for-the-skilled-what-is-skill.aspx
例題
CadenceのBlogでは、以下のコードがサンプルで載っている
(defun walkCvHier (cv consume) (foreach inst cv~>instances (walkCvHier inst~>master consume)) (consume cv))
あいかわらずCamelCaseなのが若干気にくわないが、これはなにかデザイン上のオブジェクトがあったときに、そのインスタンスを探していって、プリミティブに当たったときに、 (consume cv)を実行する、というもの。
SICPをやっていれば、すぐに分かるけど、いわゆる高階関数の例。以前は、Lispと同じ風に書かないといけなかったのが、Scheme風に書けるよ、ということか。いまいち、説得力がないぞw
ということで、
今回は終わり。Cadenceのブログも続きがあるらしいので、その都度どんなもんか見ていきます。
でも、僕自身、CLOSのオブジェクトの使い方がいまいち分かっていないので、仕事でSKILL++を使うべきか悩んでいます。この辺は、プログラミングGaucheを読んで勉強すべきかな。