proglog

主にプログラミングに関する断片的メモ

識別子で驚かないために

Schemeを触りはじめて、その識別子の構成の自由さにびっくりした。
というか、識別子なのか、何か文法上の特別な記法なのか、パッと見では混乱することがある。

そこで、r5rsを見て、ちょっと整理。
よく分からないのもあるけど。

;;schemeで可能な識別子
;;! $ % & * + - . / : < = > ? @ ^ _ ~

;;DrSchemeのR5RSモードでは通る。
;;Gaucheでは文法エラーになる。
;;それはキーワード引き数、名前付き引き数に使われる書き方だから?
(define :tag "タグっぽい")
(display :tag)
(newline)
;以下のコメントの区切りまでのパターンは、
;Gaucheでは|で囲まれて返ってくる。
;ただ、使う時は|はいらないみたい。
(define +add "これいいの?")
(display +add)
(newline)
(define -subtract "これもいいの?")
(display -subtract)
(newline)
(define @array "これはあんまりよくないらしい")
(display @array)
(newline)
(define .... "・・・・・")
(display ....)
(newline)
(define ... "・・・")
(display ...)
(newline)
(define .. "・・")
(display ..)
(newline)
;;;ここまで
(define a+dd "なにも足さない")
(display a+dd)
(newline)
(define s-ubtract "なにも引かない")
(display s-ubtract)
(newline)
(define array@noarray.com "こっちはいいらしい")
(display array@noarray.com)
(newline)
(define =eq "eq")
(display =eq)
(newline)
(define && "かつ")
(display &&)
(newline)
(define $str1 "Perlっぽく")
(display $str1)
(newline)
(define %hlist "連想配列じゃない")
(display %hlist)
(newline)
(define *Multi "掛け算か?")
(display *Multi)
(newline)
(define /Div "パス名とか割り算とかか?")
(display /Div)
(newline)
(define <FH> "ファイルハンドルと行入力演算子だと思った?")
(display <FH>)
(newline)
(define <^_^?> "何が言いたい?")
(display <^_^?>)
(newline)
(define <@~.~@> "だからなに?")
(display <@~.~@>)
(newline)
(define abc=>def "なにも変えないがな")
(display abc=>def)
(newline)
(define set!? "命名規約は守ろう")
(display set!?)
(newline)
(define $./:<> "なんだこれ")
(display $./:<>)

codepadでの出力は
http://codepad.org/BeMXZO01

やっぱ驚く。