ズンドコキヨシ with Lazy K

twitterで[書けと脅された](https://twitter.com/necojackarc/status/708505982620413952)ので、書いてみました。方針としては、[Brainf**kのやつ](http://qiita.com/angel_p_57/items/35eabfa66b95e5b44e4b)とだいたい同じです。
[オンラインで動かせる](http://lazy-k.appspot.com/p/nKhzKS4p8c)ので、入力を変えて試してみてください。

まずはHaskellで下書き。

```hs
main :: IO ()
main = interact $ zunDokoKiyoshi [] . mSeries . seed

seed :: String -> [Int]
seed = pad . toBinary

toBinary :: String -> [Int]
toBinary = concatMap (reverse . take 8 . bits . fromEnum)

bits :: Int -> [Int]
bits x = mod x 2 : bits (div x 2)

pad :: [Int] -> [Int]
pad xs = xs ++ take (32 - length xs) (repeat 1)

mSeries :: [Int] -> [Int]
mSeries xs = ys
  where ys = xs ++ zipWith xor (drop 4 ys) (drop 29 ys)

xor :: Int -> Int -> Int
xor x y = mod (x + y) 2

zunDokoKiyoshi :: [Int] -> [Int] -> String
zunDokoKiyoshi (1 : 0 : 0 : 0 : 0 : _)  _ = "キ・ヨ・シ！"
zunDokoKiyoshi xs (y : ys) = ["ズン ", "ドコ "] !! y ++ zunDokoKiyoshi (y : xs) ys
```

Haskellもどきの自家製DSLを使うと、下のような感じに。
`zipWith`も`concatMap`もないので、HaskellのPreludeのソースを見て実装。
`foldr`を用意しておくと、色々使えて便利なことが分かりました。
DSLのソースは[ここ](https://github.com/rst76/Lazy-K/blob/master/LazyK/Util.hs)にあります。殴り書きなので、後で整理する。

```hs
import Prelude (($), putStrLn, fromEnum)
import qualified Prelude as P (foldr)
import LazyK.Prim
import LazyK.Util

main = putStrLn $ showC $
  b :$ (zunDokoKiyoshi :$ (repeat :$ num 1)) :$ (b :$ mSeries :$
  (b :$ seed :$ (takeWhile :$ (b :$ not :$ (le :$ num 256)))))

seed = b :$ pad :$ toBinary

toBinary = concatMap :$ (b :$ reverse :$ (b :$ (take :$ num 8) :$ bits))

bits = (m :$) $ lambda "r" $ lambda "x" $
  cons :$ (mod :$ V "x" :$ num 2) :$ (m :$ V "r" :$ (div :$ V "x" :$ num 2))

pad = lambda "x" $ append :$ V "x" :$
  (take :$ (sub :$ num 32 :$ (length :$ V "x")) :$ (repeat :$ num 1))

mSeries = lambda "x" $ m :$ (lambda "r" $ append :$ V "x" :$
  (zipWith :$ xor :$ (drop :$ num 4 :$ (m :$ V "r")) :$ (drop :$ num 29 :$ (m :$ V "r"))))

xor = lambda "x" $ lambda "y" $
  mod :$ (plus :$ V "x" :$ V "y") :$ num 2

zunDokoKiyoshi = (m :$) $ lambda "r" $ lambda "x" $ lambda "y" $
  ands :$ (zipWith :$ eq :$ dzzzz :$ V "x") :$ kiyoshi :$
  (append :$ nthNX (car :$ V "y") (cons :$ zun :$ (cons :$ doko :$ nil)) :$
  (m :$ V "r" :$ (cons :$ (car :$ V "y") :$ V "x") :$ (cdr :$ V "y")))

dzzzz   = fromInt [1, 0, 0, 0, 0]

-- UTF-8
zun     = fromInt [227, 130, 186, 227, 131, 179, 32]
doko    = fromInt [227, 131, 137, 227, 130, 179, 32]
kiyoshi = fromInt [227, 130, 173, 227, 131, 187, 227, 131, 168, 227, 131, 187, 227, 130, 183, 239, 188, 129, 256]

-- Shift_JIS
-- zun     = fromInt [0x83, 0x59, 0x83, 0x93, 0x20]
-- doko    = fromInt [0x83, 0x68, 0x83, 0x52, 0x20]
-- kiyoshi = fromInt [0x83, 0x4C, 0x81, 0x45, 0x83, 0x88, 0x81, 0x45, 0x83, 0x56, 0x81, 0x49, 0x100]

fromInt = P.foldr (\i a -> cons :$ num i :$ a) nil
```

これをコンパイルして出力されるLazy Kはこちら。
ぜんぜんゴルフしてないので、まだまだ短くなるはず。

```
S(KS)K(SII(S(K(S(S(KS)(S(KK)(S(S(K(SII(S(K(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))))(S(K(S(S(KS)(S(KK)(S(KS)(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(SII)))))(K(K(K(SI(K(SK)))))))))(SSK)K))(SII(S(K(S(K(S(S(KS)(S(KK)(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))(K(K(SI(KK))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))))(K(K(K(SI(K(SK))))))))))(S(S(KS)(S(K(S(K(SSK))))(S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(K(S(KK)(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(S(K(S(S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(K(S(KK)(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)I(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(KK))))))))(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(SI(SS(SK)))(SS(SS(SS(S(SSS))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SSSS(SS(SS(SK))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK))))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SSSS(SS(SS(SK))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SSSSSS(SS(SK)))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SSS)(S(SS(SS(SK)))(SS(SK))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SSSS(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SII(SII(S(S(KS)K)I)))(KK)))))))))))))))))))))(S(K(S(K(S(S(K(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))(S(S(S(SI(KK))(K(SI(K(SK)))))(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(S(S(SS(SS(SK)))(SS(SK)))S)(SSSSSS(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))))))))))))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(SS(SSI(SS(SK))))(SS(SK))(S(KS)K))(KK))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(S(SS(SK))(SS(SSSS(SS(SK))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SSSSSS(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(SS(SSI(SS(SK))))(SS(SK))(S(KS)K))(KK))))))(KK)))))(KK)))))))(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)(S(KK)(SII)))))(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))K)))))(K(K(SI(K(SK))))))))(SII(S(K(S(S(KS)(S(K(SI))K))))(S(K(S(KK)))(SII)))I))(S(KS)K(S(K(SII))(S(S(KS)(S(KK)(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))(K(S(S(K(SII(S(K(S(K(S(S(KS)(S(KK)(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))(K(K(SI(KK))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))))(K(K(K(SI(K(SK))))))))))(S(S(KS)(S(K(S(K(S(K(S(K(SI(K(SK))))))(S(K(S(S(S(K(SII))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(SI(K(S(K(SI))K)))))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))))))))(S(KK)(S(KK)(S(K(S(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K)))K)))))))))(K(K(S(K(S(SI(K(S(K(SI))K)))))(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))))))(K(SK)))))K)))))(S(KS)(S(K(S(KS)))(S(KK))))))(K(K(S(S(KS)K)I))))))(S(K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK)))))))))))(K(KI)))(SII(S(S(KS)K)I))))(SII)))(S(K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK)))))))))))(K(KI)))(SS(SS(SSI(SS(SS(SK)))))(S(KS)K))))(SII))))))(S(KS)K(S(KS)K(S(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(S(S(K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK))))))))))))(K(K(K(KK)))))))(S(K(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K(S(SS(SSI(SS(SK))))(SS(SK))(S(KS)K))))(SII(S(K(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))))(S(K(S(S(KS)(S(KK)(S(KS)(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(SII)))))(K(K(K(SI(K(SK)))))))))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))(SK))))(K(SII(S(K(S(S(KS)(S(K(SI))K))))(S(K(S(KK)))(SII)))I))))(S(S(K(SII(S(K(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))))(S(K(S(S(KS)(S(KK)(S(KS)(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(SII)))))(K(K(K(SI(K(SK)))))))))))(S(KS)K(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))(K(KK))(S(KS)K(SII(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)(S(KK)(SII)))))(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))K)))))(K(K(SI(K(SK)))))))(KK))(S(KS)K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK))))))))))))(K(K(K(KK)))))(S(S(S(KS)K))I(S(S(KS)K)I)))(SII(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(S(S(K(S(K(SI(K(SK))))))(S(K(S(S(S(K(SII))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(SI(K(S(K(SI))K)))))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))))))))(S(KK)(S(KK)(S(K(S(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K)))K)))))))))(K(K(S(K(S(SI(K(S(K(SI))K)))))(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))))))(K(SK)))))K))(K(S(S(KS)K)I))))))(S(S(KS)(S(KK)(SII)))(K(S(S(K(S(K(SI(KK)))))(S(K(S(S(S(K(SII))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(SI(K(S(K(SI))K)))))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))))))))(S(KK)(S(KK)(S(K(S(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K)))K)))))))))(K(K(S(K(S(SI(K(S(K(SI))K)))))(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))))))(K(SK)))))K))(K(S(S(KS)K)I)))))))))))(SII(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(S(KS)K)(K(SI(KK)))))))(S(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))))(K(K(K(KK))))))(S(KS)K(S(S(KS)(S(KK)S))(KK))(S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(K(S(KK)(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK))))(SII(SII(S(S(KS)K)I))))))))
```
デバッグの辛さとか、語りたいことも色々あるのだけど、疲れたのでとりあえず寝ます。