読者です 読者をやめる 読者になる 読者になる

GrassのHello World

id:nishiohirokazuさんが割と直球で書いていたので、小細工しつつ2時間ほどがんばって草植えてみたwww Helloworldに2時間とかwwwwwww

改行除くと751738文字。

wvwWwwwwWwwwwwwWWWWWwWWWWWwwwwvwwwwWWWwwWwwWWWWWWwwwwWwwvwWWwWwwvwwWWwvwWWWwwWW
WWWwwwWwwWWWWWWwWWWWWWWwWWWWwWWWWWwWWWWWWwWWWWWWWWWWWWWWwwwwwwwwWwWwWWWwwWWWWww
wwwwwWWWWWwwwwwwwWWWWWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWwwwwww
wwwwwwwwwwwwwwWwwwwwwwwwwwwwWwwwwwwWWwwwwwwWWWwwwwwwWWWWWWwwwwwwwwwwwwwwwwwwwwW
wwwwwwwwwwWWwwwwWWWwwwwWWWWwWWWWWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWwWwwwWWwWWWwWWWWw
WWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwww
wwwwwwWWwwwwwwwwwwwWWWwwwwwwwWWWWwWWWWWwwwwwwwwWWWWWWwwwwwwwwwwwwwwwwwwwwwWWWWW
WWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wWWwwwwwwwwwwwwwWWWwwwwwwwwwwwwwWWWWwwwwwwwwWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwWWWW
WWwwwwwwwwwwwwwwwwwwwwwwwww

wv (λx . x) 重要。スタックの底の方から繰り返し使いたい値や関数を引き上げることができます。
公式のサンプル「はいはいわろすわろす」でも効果的に使われています。
あと2番目の関数、最初は

(lambda (n) (OUT (n SUCC w)))

という感じだったのを、9割5分書けてから l が3つ出てくる事に気付いて

(lambda (n) (progn (OUT (n SUCC w)) n))

に書き直したんだけど、結果1文字しか縮まらなかったorz
同じ文字が何度も出てくる文字列を出力する場合にはこうしておいた方が楽になると思います。

あとは数字の作り方の工夫やwvの使い所次第で縮めて行けるんじゃないかなと。ちなみに今回SUCCは最大1周しかさせてません。

↓作業用のコメント付きソース

wv id
wWwwwwWwwwwwwWWWWWwWWWWWwwwwv print
wwwwWWWwwWwwWWWWWWwwwwWwwv +
wWWwWwwv dbl
wwWWwv 1
;main
wWWWww   :dbl 1 = 2
WWWWWwww :+ 1  = 1+
Www      :1+ 2  = 3
WWWWWWw  :dbl _ = 6
WWWWWWWw :dbl _ = 12
WWWWw   : 1+ 12 = 13
WWWWWw  : 1+ 13 = 14
WWWWWWw : 1+ 14 = 15
WWWWWWWWWWWWWWwwwwwwww :id 2
Ww      : 2^2 = 4
Ww      : 4^4 = 256
WWWww   : 4^2 = 16
WWWWwwwwwww   : 13^2 = 169 spc
WWWWWwwwwwww  : 14^2 = 196
WWWWWWwwwwwww : 15^2 = 225
WWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwww :id id
Wwwwwwwwwwwwwwwwwwwww  :id +
Wwwwwwwwwwwwww       :+ 12    = 12+
Wwwwwww              :12+ 169 = 181 ,
WWwwwwww             :12+ 196 = 208
WWWwwwwww            :12+ 225 = 237 d
WWWWWWwwwwwwwwwwwwwwwwwwww   :id 1+
Wwwwwwwwwww          :1+ 169  = 170 !
WWwwww               :1+ 208  = 209 H
WWWwwww              :1+ 237  = 238 e
WWWWw                :1+ 238  = 239
WWWWWwwwwwwwwwwwwwwwwww :1+ 2 = 3
WWWWWWWWWWWw       :plus 3  : 3+
Wwww    :3+ 239  = 242
WWw     :3+ 242  = 245 l
WWWw    :3+ 245  = 248 o
WWWWw   :3+ 248  = 251 r
WWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwww : id id
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww :id print
H Wwwwwwwwwwww
e WWwwwwwwwwwww
l WWWwwwwwww
l WWWWw
o WWWWWwwwwwwww
, WWWWWWwwwwwwwwwwwwwwwwwwwww
  WWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwww
WWWWWWWWWwwwwwwww :id print
W wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
o WWwwwwwwwwwwwww
r WWWwwwwwwwwwwwww
l WWWWwwwwwwww
d WWWWWwwwwwwwwwwwwwwwwwwwwwwwwww
! WWWWWWwwwwwwwwwwwwwwwwwwwwwwwww

疲れた…割り算はまた明日。

無駄っぽい所をちょっと削って13文字減。
やったことは数字の作る順番とidの位置を変えただけ。