Arc

* Lisp-1
* 代入オペレータは=
o 変数が無かったら作る
o carやcdrの戻り値にも適用できる
o 下記のコレクションのインデックスアクセスの戻り値にも適用できる
* 関数定義はdef
* 匿名関数はfn
* 文字列やハッシュテーブルのような構造のあるオブジェクトは関数のように使用できる
o その場合インデックスアクセス関数のように働く
o ("foo" 0) => #\f
* letは1変数のみの束縛,複数やりたい場合はwith
* prで出力,prnで改行つき出力
o どちらも複数の引数を受付け,全部出力する
* 真偽値はtとnil
* 複数式の評価はdo
* 否定オペレータはno
* 同一性比較はis,同値性比較はiso(isomorphic:"同一構造の~" から取ったとのこと)
* for,each等反復オペレータ
チュートリアル http://ycombinator.com/arc/tut.txt

http://d.hatena.ne.jp/r0c/20080130/1201666194

Paul GrahamはCommonLisp系(Lisp-2)の人かと思っていたが、ArcはLisp-1だ。
代入が=になっても前置記法だとなんか違和感がある。
lambdaがfnになって4文字短縮
ハッシュが、(obj x 1 y 2)。関数名をobjにするあたりがJavaScript風味。キーの位置の引数を自動的にquoteするのが親切。
("foo" 0)と文字列を関数として使うと引数番目の文字が返る。ハッシュアクセスも((obj x 1 y 2) 'x)で可能。

ある意味で、Arcはプログラムを短くするために数年かけて蓄積されたトリックの集まりみたいなものだ。

私は文字列セットに対処することに一日でさえも割きたくはない。文字列セットはブラックホールだ。
Asciiしかサポートしないことは英語圏以外の人にとってはほとんど侮辱的とさえ思えるほど国際化の流れに反しているということは理解している。

http://d.hatena.ne.jp/sirocco634/20080130#1201690137

Gaucheにもオブジェクトを関数として呼び出す機能あるじゃん。なんでデフォルトで定義してないんだろ。

デフォルトでは、を引数とする object-applyのメソッドは定義されていないので、 この式はエラーになります。しかし、次のようなメソッドを定義すると:

(define-method object-apply ((s <string>) (i <integer>))
  (string-ref s i))

最初の式はまるで文字列が整数に適用されたかのように動作します。

("abcde" 2) ⇒ #\c
http://practical-scheme.net/gauche/man/gauche-refj_54.html#SEC96