URLをGrass言語に変換するWebサービス

aike2008-10-21

URLをGrass言語に変換するWebサービスを作りました。

 Grass化URL生成ツール

tinyurlとかってありますよね、URL短縮サービス。あんなやつです、あんなやつ。でもこっちは元のURLより100倍くらい長くなるのでURL伸張サービスです。

生成するのは「w」と「W」と「v」の文字だけで表現する超ストイックな関数型言語Grassのプログラムです。Grassインタープリターで実行すると元のURLが出力されます。例として、このブログのURLを変換すると以下のようになりました。暗号化?と言いたくなりますがそこはぐっと我慢してください。名刺に印刷したりするとコミュニケーションのきっかけになったりして良いと思います。

wwWWwWWWwvwwWWwWWWwWWWWwvwwwwWWWwwWwwWWWWWWwwwwWww
vwwwWWwWWWWwvWWwwwwWwwwwWWWwwwwwwWwwwwwwWwwwwwwwWW
WWWWwwWwwwwwwwwwwWWWWWWWWWwWwwwwwwwWWWWWWWWWWWwWww
wwwwWWWWWWWWWWWWWwwwwwwwWwwwwwwwwWWWWWWWWWWWWWWWww
wwwwwwwwwwWwwvwWWWWWWWWWWWWWWWWWWWWWWwvWWwWwwwwwww
wwwwwwwwwwwwwwwwwWWWwWWWWwWWWWWwWWWWWWwWWWWWWWwWWW
WWWWWwWWWWWWWWWwWWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWW
WwWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWW
WwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWWwvWWwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwWWwWWWwWWWWwWWWWWwWWWW
WWwWWWWWWWwWWWWWWWWwWWWWWWWWWwWWWWWWWWWWwWWWWWWWWW
WWwWWWWWWWWWWWWwWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWW
WWWWWWWWWWwWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWwWWWW
WWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWW
WWWWWwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWwvWwwwwwwwwwwwwwwWWwwwWWWwWWWWwwww
wwwwwWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWwWWWWWWWW
wwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWwwwwwwwwwWWW
WWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWW
WwwwwwwwwwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwww
wwWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWW
WWwwwwWWWWWWWWWWWWWWWWwwwwwwwWWWWWWWWWWWWWWWWWwwwW
WWWWWWWWWWWWWWWWWwwwwwWWWWWWWWWWWWWWWWWWWwwwWWWWWW
WWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWW
WWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWW
WWWWWwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwwwwwww
wWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWwww
wwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwww

出力されるプログラムをgrass.elで読めるリスト形式で書くと以下のようになります。

'(
  (abs <2> (f x)
       ((app f x)
        (app f 1)
        ))
  (abs <3> (f x)
       ((app f x)
        (app f 1)
        (app f 1)
        ))
  (abs plus (m n f x)
       ((app n f)
        (app 1 x)
        (app m f)
        (app 1 2)
        ))
  (abs mult (m n f)
       ((app n f)
        (app m 1)
        ))
  (app plus <2>)
  (app 1 <3>)        ;; <5>
  (app mult <2>)
  (app 1 <3>)        ;; <6>
  (app 1 <3>)        ;; 6^3     = <216>
  (app mult 2)
  (app 1 <2>)        ;; 6*2     = <12>
  (app plus 1)
  (app 1 7)          ;; 12+5    = <17>
  (app plus 1)
  (app 1 6)          ;; 17+216  = <233>
  (app plus 7)
  (app 1 8)          ;; 216+216 = <432> = <176>
  (app plus 12)
  (app 1 2)          ;; 5+176   = <181>
  (abs succ2 (n)     ;; SUCC alias
       ((app succ n)
	))
  (app 2 succ2)      ;; 181 succ
  (app 1 w)          ;; 181 succ w   =   "."
  (app succ2 1)      ;; succ         =   "/"
  (app succ2 1)      ;;                  "0"
  (app succ2 1)      ;;                  "1"
  (app succ2 1)      ;;                  "2"
  (app succ2 1)      ;;                  "3"
  (app succ2 1)      ;;                  "4"
  (app succ2 1)      ;;                  "5"
  (app succ2 1)      ;;                  "6"
  (app succ2 1)      ;;                  "7"
  (app succ2 1)      ;;                  "8"
  (app succ2 1)      ;;                  "9"
  (app succ2 1)      ;;                  ":"
  (app 20 succ2)     ;; 233 succ
  (abs succ3 (n)     ;; SUCC alias
       ((app succ2 n)
	))
  (app 2 w)          ;; 233 succ w       "a"
  (app succ3 1)      ;;                  "b"
  (app succ3 1)      ;;                  "c"
  (app succ3 1)      ;;                  "d"
  (app succ3 1)      ;;                  "e"
  (app succ3 1)      ;;                  "f"
  (app succ3 1)      ;;                  "g"
  (app succ3 1)      ;;                  "h"
  (app succ3 1)      ;;                  "i"
  (app succ3 1)      ;;                  "j"
  (app succ3 1)      ;;                  "k"
  (app succ3 1)      ;;                  "l"
  (app succ3 1)      ;;                  "m"
  (app succ3 1)      ;;                  "n"
  (app succ3 1)      ;;                  "o"
  (app succ3 1)      ;;                  "p"
  (app succ3 1)      ;;                  "q"
  (app succ3 1)      ;;                  "r"
  (app succ3 1)      ;;                  "s"
  (app succ3 1)      ;;                  "t"
  (abs out2 (n)      ;; OUT alias
       ((app out n)
	))
  (app out2 14)      ;; h
  (app out2 3)       ;; t
  (app out2 1)       ;; t
  (app out2 9)       ;; p
  (app out2 28)      ;; :
  (app out2 40)      ;; /
  (app out2 1)       ;; /
  (app out2 28)      ;; a
  (app out2 21)      ;; i
  (app out2 20)      ;; k
  (app out2 27)      ;; e
  (app out2 21)      ;; l
  (app out2 5)       ;; a
  (app out2 33)      ;; b
  (app out2 50)      ;; .
  (app out2 23)      ;; n
  (app out2 6)       ;; e
  (app out2 15)      ;; t
  (app out2 12)      ;; /
  (app out2 34)      ;; g
  (app out2 24)      ;; r
  (app out2 9)       ;; a
  (app out2 25)      ;; s
  (app out2 1)       ;; s
  (app out2 6)       ;; /
  )
)

おしまい