前回の記事で 九九表のすべてのマスの和を求める問題 をいろいろな言語で書きました。
記事の最後でそのうち Lazy_K でも書きます的な事を宣言しておいたんですが、この度そのコードが完成しましたのでご報告します。
Lazy_K って何?
純粋関数型言語の1つです、位置づけとしては ジョーク言語, 難解言語, ホビー言語 などに分類されるんじゃないでしょうか。
特徴としては言語に組み込まれたシンボルの少なさです。
Unlambda記法であれば、s
, k
, i
, `
の4つのシンボルだけでチューリング完全な表現力を持っています。
Lazy_K の言語的なおもしろさは以下の記事を読んでいただければ(分かる人には)分かると思います。
マイナーな言語ですのでやってみようと思うと実行環境の準備からしなければいけないんですが、幸いなことにブラウザで実行できる REPL がありました。
上の窓に「プログラムの本体」、下の窓に「プログラムへの入力」を入力して実行することができます。
コードを書く
九九表のすべてのマスの和を求めるにあたってアルゴリズムの大筋は前回 JavaScript で書いたものと同じです。
引用します。
// range(1, 9) の代わり const ns = [...Array(9).keys()].map(i => i+1); // flatten() の代わり const flatten = arr => [].concat(...arr); // sum() の代わり const sum = ns => ns.reduce((i, j) => i+j, 0); let result = sum(flatten(ns.map((i, _, ms) => ms.map(j => i*j)))); console.log(result); // => 2025
数列を組み立てて、直積を求め、flatten して、sum を取る。これです。
ちなみに前回、こんなことを愚痴っていましたが、
Array.range()
もArray.flatten()
もSet.product()
もMath.sum()
も無いとかさすがにツラいです。
はい、実は Lazy_K にもこれらの関数はありません。
それどころか自然数も積も和も if then else
などの制御構文も一切ありません。唯一あるのは関数適用だけです。
なので何もかも自分で作らないといけませんね。まいったまいった。
下準備
いくら Lazy_K がチューリング完全とはいえ、そのままでは人間がプログラムを書くのはツラすぎます。せめて λ抽象 があれば、という感じです。
なので Lazy_K に λ抽象 のシンタックスを追加して、それを Lazy_K のコードに変換するトランスレータを書きました。
これです。
このツールの使い方については Qiita に記事を上げておきました。
正直、このツールを作るのにもガッツリ Haskell 書いてるので下準備どころではないですが。
今度こそコードを書く
さて必要なパーツを淡々と作っていきます。
基本的には λ抽象 を含むコードを書いていきますが、純粋な Lazy_K のコードも適宜 見せていきます。
真理値
TRUE = ^xy.x # => k FALSE = ^xy.y # => `ki IF = ^BOOL THEN ELSE.``BOOL THEN ELSE # => i NOT = ^x.``xFALSE TRUE # => ``s``si`k`ki`kk AND = ^xy.``xyFALSE # => ``ss`k`k`ki OR = ^xy.``xTRUEy # => ``si`kk
ペア・リスト
複数のデータを保持するのには連鎖リストを使います。
CONS = ^xyf.``fxy # => ``s``s`ks``s`kk``s`ks``s`k`sik`kk CAR = ^x.`xTRUE # => ``si`kk CDR = ^x.`xFALSE # => ``si`k`ki NULL = FALSE # => `ki ISNULL = ^x.``x^_ _ _.FALSE TRUE # => ``s``si`k`k`k`k`ki`kk
不動点コンビネータ
再帰的関数を定義するために無名再帰が必要です。無名再帰のためには不動点コンビネータですよね。
今回はハスケル・カリー先生のYコンビネータを使います。
Y = ^f.`^x.`f`xx^x.`f`xx # => ``s``s``s`ksk`k``sii``s``s`ksk`k``sii
自然数
自然数はチャーチ数として表現します。
0 = ^fx.x # => `ki 1 = ^fx.`fx # => i 2 = ^fx.`f`fx # => ``s``s`kski 3 = ^fx.`f`f`fx # => ``s``s`ksk``s``s`kski 4 = ```sii2 # => ```sii``s``s`kski 256 = ```sii4 # => ```sii```sii``s``s`kski
各種演算も定義しておかなければいけません。
商 DIV
と余剰 MOD
の定義には再帰を使います。先ほどのYコンビネータの出番です。
ISZERO = ^n.``n^_.FALSE TRUE # => ``s``si`k`k`ki`kk GTE = ^mn.`ISZERO``SUBnm # 大なりイコール # => ``s`k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kikk GT = ^mn.``AND `ISZERO``SUBnm `NOT `ISZERO``SUBmn # 大なり # => ``s``s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k`si``s `k`s`kk``s`k`sik`k`kk`k`k`kikk``s`k`s`k``s``si`k`ki`kk``s`k`s`k``s``si`k`k` ki`kk``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`sik`k`kk`k`k`kik LTE = ^mn.`ISZERO``SUBmn # 小なりイコール # => ``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kik LT = ^mn.``AND `ISZERO``SUBmn `NOT `ISZERO``SUBnm # 小なり # => ``s``s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk ``s`k`sik`k`kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s`k`s`k``s``si`k`k`ki`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`ksk `k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kikk EQ = ^mn.``AND``GTEmn``LTEmn # イコール # => ``s``s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k`si``s `k`s`kk``s`k`sik`k`kk`k`k`kikk``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`k k``s`k`sik`k`kk`k`k`kik SUCC = ^n.^fx.`f``nfx # 後者関数 # => `s``s`ksk PLUS = ^mn.^fx.``mf``nfx # 和 # => ``s`ks``s`k`s`ks`s`kk MULT = ^mn.^f.`m`nf # 積 # => ``s`ksk POW = ^mn.`nm # 累乗 # => ``s`k`sik PRED = ^nfx.```n^gh.`h`gf^u.x^u.u # 前者関数 # => ``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si``s `k`s`kk``s`k`sik`k`kk`k`k`ki SUB = ^mn.``nPREDm # 差 # => ``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`ksk`k`` s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kik DIV = `Y^DIV.^mn.```IF``LTmn 0 `SUCC ``DIV ``SUBmn n # 商 # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s``s`ks``s`k`s`ki``s`` s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k `sik`k`kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s`k`s`k``s``si`k`k`ki`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`ksk`k``s `k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kikk`k`k`ki``s`k`s`k`s`k`s``s`ksk``s` `s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k `k`kik`k`ki MOD = `Y^MOD.^mn.```IF``LTmn m ``MOD ``SUBmn n # 余剰 # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s``s`ks``s`k`s`ki``s`` s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k `sik`k`kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s`k`s`k``s``si`k`k`ki`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`ksk`k``s `k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kikkk``s``s`ks``s`k`s`ks``s``s`ks``s` kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kik`k`ki
自然数の表示
自然数を扱えるようになりましたが、文字列に変換しなければ表示ができません。
自然数を文字列に変換する TOSTRING
関数を定義します。
出力ストリームの終端を表す EOF
という値も定義しておきます。
TOSTRING_ = `Y^TOSTRING_.^n.``CONS ``PLUS 48 ``MODn10 ```IF ``LTEn9 NULL `TOSTRING_``DIVn10 # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`k``s``s`ks``s`kk``s`ks``s` k`sik`kk``s`k```s`ks``s`k`s`ks`s`kk````s`ks``s`k`s`ks`s`kk````s`ksk```sii`` s``s`kski````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk``s``s`kski```s` `s`ksk``s``s`kski``s``s`kski``s```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k` s``s`ks``s``s`ks``s`k`s`ki``s``s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k `ki`kk``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`k sk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s `k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kikkk` `s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`k k`k`k`kik`k`ki`k````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk``s``s`ks ki``s`k`s``s``s`ki``s``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`si k`k`kk`k`k`kik`k```s``s`kski``s``s`ksk``s``s`kski`k`ki``s``s`ksk`k``s```s`` s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s``s`ks``s`k`s`ki``s``s`ks`` s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`kk``s`k`s``si`k``s``s`ks``s`k`s`k s``s``s`ks``s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k `kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s`k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k `si``s`k`s`kk``s`k`sik`k`kk`k`k`kikk`k`k`ki``s`k`s`k`s`k`s``s`ksk``s``s`ks` `s`k`s`ks``s``s`ks``s`kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kik `k`ki`k````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk``s``s`kski TOSTRING = ^n.``REVERSE_ EOF `TOSTRING_ n # => ``s`k````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s`k`s``s`ki``s`` si`k`k`k`k`ki`kkk``s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`k``s`k`s``s`k``s ``s`ks``s`kk``s`ks``s`k`sik`kk``si`kkk`k`k``si`k`ki```sii```sii``s``s`kski` ``s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`k``s``s`ks``s`kk``s`ks``s`k `sik`kk``s`k```s`ks``s`k`s`ks`s`kk````s`ks``s`k`s`ks`s`kk````s`ksk```sii``s ``s`kski````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk``s``s`kski```s`` s`ksk``s``s`kski``s``s`kski``s```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s ``s`ks``s``s`ks``s`k`s`ki``s``s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k` ki`kk``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`sik`k`kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s` k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kikkk`` s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk `k`k`kik`k`ki`k````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk``s``s`ksk i``s`k`s``s``s`ki``s``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik `k`kk`k`k`kik`k```s``s`kski``s``s`ksk``s``s`kski`k`ki``s``s`ksk`k``s```s``s ``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s``s`ks``s`k`s`ki``s``s`ks``s `k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k` kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s`k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k` si``s`k`s`kk``s`k`sik`k`kk`k`k`kikk`k`k`ki``s`k`s`k`s`k`s``s`ksk``s``s`ks`` s`k`s`ks``s``s`ks``s`kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kik` k`ki`k````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk``s``s`kski EOF = 256 # => ```sii```sii``s``s`kski ISEOF = ^x.``EQx256 # => ``s``s``s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`kk``s`k`s``s`k`s``s i`k``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si ``s`k`s`kk``s`k`sik`k`kk`k`k`kikk``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k` s`kk``s`k`sik`k`kk`k`k`kik`k```sii```sii``s``s`kski
リスト操作の高階関数
お馴染みの map や append, reverse などを定義します。もう少しです。
MAP = `Y^MAP.^f XS.```IF `ISNULL XS NULL ``CONS `f`CAR XS ``MAPf`CDR XS # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s`k`s``s``s`ki``s``si`k`k`k`k`k i`kk`k`ki``s`k`s``s`ks``s`k`s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``s``s`ksk` k``si`kk``s``s`ks``s`k`s`ks`s`kk`k`k``si`k`ki APPEND = `Y^APPEND.^XS YS.```IF `ISNULL XS YS ``CONS `CAR XS ``APPEND `CDR XS YS # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s`ki``s``si`k`k`k`k`ki `kk``s`k`s``s`ks``s`kk``s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``si`kk``s``s`k sk`k``si`k`ki REVERSE_ = `Y^REVERSE_.^ACC XS.```IF `ISNULL XS ACC ``REVERSE_ ``CONS `CAR XS ACC `CDR XS # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s`k`s``s`ki``s``si`k`k `k`k`ki`kkk``s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`k``s`k`s``s`k``s``s`ks ``s`kk``s`ks``s`k`sik`kk``si`kkk`k`k``si`k`ki REVERSE = `REVERSE_ NULL # => ````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s`k`s``s`ki``s``si`k` k`k`k`ki`kkk``s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`k``s`k`s``s`k``s``s`k s``s`kk``s`ks``s`k`sik`kk``si`kkk`k`k``si`k`ki`ki CONCAT = `Y^CONCAT.^XSS.```IF `ISNULL XSS NULL ``APPEND `CAR XSS `CONCAT `CDR XSS # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk `k`ki``s`k`s``s`k```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s`ki` `s``si`k`k`k`k`ki`kk``s`k`s``s`ks``s`kk``s`k``s``s`ks``s`kk``s`ks``s`k`sik` kk``si`kk``s``s`ksk`k``si`k`ki``si`kk``s``s`ksk`k``si`k`ki RANGE = `Y^RANGE.^n.``CONS n ```IF `ISZEROn NULL `RANGE`PREDn # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ks``s`kk``s`ks``s`k`sik `kk``s`k`s``s``s`ki``s``si`k`k`ki`kk`k`ki``s``s`ksk`k``s``s`ks``s`k`s`ks``s ``s`ks``s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk` k`k`ki SUM = `Y^SUM.^NS.```IF `ISNULL NS 0 ``PLUS `CAR NS `SUM `CDR NS # => ```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk `k`ki``s`k`s``s`k``s`ks``s`k`s`ks`s`kk``si`kk``s``s`ksk`k``si`k`ki
九九表のすべてのマスの和
お待たせしました、やっと本題です。
NUMS = ``MAP SUCC `RANGE 8 # => `````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s`k`s``s``s`ki``s``si`k`k`k`k `ki`kk`k`ki``s`k`s``s`ks``s`k`s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``s``s`ks k`k``si`kk``s``s`ks``s`k`s`ks`s`kk`k`k``si`k`ki`s``s`ksk````s``s``s`ksk`k`` sii``s``s`ksk`k``sii``s`k`s``s``s`ks``s`kk``s`ks``s`k`sik`kk``s`k`s``s``s`k i``s``si`k`k`ki`kk`k`ki``s``s`ksk`k``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks`` s`k`s`kk``s``s`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`ki```s``s`ksk` `s``s`kski``s``s`kski KUKU = `SUM `CONCAT ``MAP ^n.``MAP ^m.``MULT n m NUMS NUMS # => ````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ki``s``si`k`k`k`k`ki`k k`k`ki``s`k`s``s`k``s`ks``s`k`s`ks`s`kk``si`kk``s``s`ksk`k``si`k`ki````s``s ``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk`k`ki`` s`k`s``s`k```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s`ki``s``si` k`k`k`k`ki`kk``s`k`s``s`ks``s`kk``s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``si` kk``s``s`ksk`k``si`k`ki``si`kk``s``s`ksk`k``si`k`ki`````s``s``s`ksk`k``sii` `s``s`ksk`k``sii``s`k`s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk`k`ki``s`k`s``s`ks ``s`k`s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``s``s`ksk`k``si`kk``s``s`ks``s`k `s`ks`s`kk`k`k``si`k`ki``s``s`k```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k` s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk`k`ki``s`k`s``s`ks``s`k`s`k``s``s`ks``s` kk``s`ks``s`k`sik`kk``s``s`ksk`k``si`kk``s``s`ks``s`k`s`ks`s`kk`k`k``si`k`k i``s`ksk`k`````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s`k`s``s``s`ki``s`` si`k`k`k`k`ki`kk`k`ki``s`k`s``s`ks``s`k`s`k``s``s`ks``s`kk``s`ks``s`k`sik`k k``s``s`ksk`k``si`kk``s``s`ks``s`k`s`ks`s`kk`k`k``si`k`ki`s``s`ksk````s``s` `s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ks``s`kk``s`ks``s`k`sik`kk``s`k `s``s``s`ki``s``si`k`k`ki`kk`k`ki``s``s`ksk`k``s``s`ks``s`k`s`ks``s``s`ks`` s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`ki`` `s``s`ksk``s``s`kski``s``s`kski`````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s` k`s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk`k`ki``s`k`s``s`ks``s`k`s`k``s``s`ks`` s`kk``s`ks``s`k`sik`kk``s``s`ksk`k``si`kk``s``s`ks``s`k`s`ks`s`kk`k`k``si`k `ki`s``s`ksk````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ks``s`kk`` s`ks``s`k`sik`kk``s`k`s``s``s`ki``s``si`k`k`ki`kk`k`ki``s``s`ksk`k``s``s`ks ``s`k`s`ks``s``s`ks``s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si``s`k`s`kk`` s`k`sik`k`kk`k`k`ki```s``s`ksk``s``s`kski``s``s`kski MAIN = ^_.``APPEND `TOSTRING KUKU EOF # => `k`````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s`ki``s``si`k`k`k` k`ki`kk``s`k`s``s`ks``s`kk``s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``si`kk``s` `s`ksk`k``si`k`ki```s`k````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks ``s`k`s``s`ki``s``si`k`k`k`k`ki`kkk``s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ks k`k``s`k`s``s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``si`kkk`k`k``si`k`ki```sii ```sii``s``s`kski```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`k``s``s`k s``s`kk``s`ks``s`k`sik`kk``s`k```s`ks``s`k`s`ks`s`kk````s`ks``s`k`s`ks`s`kk ````s`ksk```sii``s``s`kski````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ks k``s``s`kski```s``s`ksk``s``s`kski``s``s`kski``s```s``s``s`ksk`k``sii``s``s `ksk`k``sii``s`k`s``s`ks``s``s`ks``s`k`s`ki``s``s`ks``s`k`s`k``ss`k`k`ki``s `k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kik``s`k`s`k` `s``si`k`ki`kk``s`k`s`k``s``si`k`k`ki`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`si k`k`kk`k`k`kikkk``s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k` s`kk``s`k`sik`k`kk`k`k`kik`k`ki`k````s`ksk``s``s`kski``s``s`ksk``s``s`ksk`` s``s`ksk``s``s`kski``s`k`s``s``s`ki``s``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si` `s`k`s`kk``s`k`sik`k`kk`k`k`kik`k```s``s`kski``s``s`ksk``s``s`kski`k`ki``s` `s`ksk`k``s```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s``s`ks``s` k`s`ki``s``s`ks``s`k`s`k``ss`k`k`ki``s`k`s`k``s``si`k`k`ki`kk``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`ksk`k``s`k`s`k`si``s` k`s`kk``s`k`sik`k`kk`k`k`kik``s`k`s`k``s``si`k`ki`kk``s`k`s`k``s``si`k`k`ki `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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`kk`k`k`kikk`k`k`ki``s`k`s`k`s`k`s ``s`ksk``s``s`ks``s`k`s`ks``s``s`ks``s`kk``s`ksk`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`ksk`k``s`k`s`k`si``s`k`s`kk``s`k `sik`k`kk`k`k`kik`k`ki`k````s`ksk``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk` `s``s`kski````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ki``s``si`k` k`k`k`ki`kk`k`ki``s`k`s``s`k``s`ks``s`k`s`ks`s`kk``si`kk``s``s`ksk`k``si`k` ki````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ki``s``si`k`k`k`k`ki `kk`k`ki``s`k`s``s`k```s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s`ks``s` ki``s``si`k`k`k`k`ki`kk``s`k`s``s`ks``s`kk``s`k``s``s`ks``s`kk``s`ks``s`k`s ik`kk``si`kk``s``s`ksk`k``si`k`ki``si`kk``s``s`ksk`k``si`k`ki`````s``s``s`k sk`k``sii``s``s`ksk`k``sii``s`k`s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk`k`ki``s `k`s``s`ks``s`k`s`k``s``s`ks``s`kk``s`ks``s`k`sik`kk``s``s`ksk`k``si`kk``s` `s`ks``s`k`s`ks`s`kk`k`k``si`k`ki``s``s`k```s``s``s`ksk`k``sii``s``s`ksk`k` `sii``s`k`s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk`k`ki``s`k`s``s`ks``s`k`s`k``s ``s`ks``s`kk``s`ks``s`k`sik`kk``s``s`ksk`k``si`kk``s``s`ks``s`k`s`ks`s`kk`k `k``si`k`ki``s`ksk`k`````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s`k`s``s` `s`ki``s``si`k`k`k`k`ki`kk`k`ki``s`k`s``s`ks``s`k`s`k``s``s`ks``s`kk``s`ks` `s`k`sik`kk``s``s`ksk`k``si`kk``s``s`ks``s`k`s`ks`s`kk`k`k``si`k`ki`s``s`ks k````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s`ks``s`kk``s`ks``s`k`s ik`kk``s`k`s``s``s`ki``s``si`k`k`ki`kk`k`ki``s``s`ksk`k``s``s`ks``s`k`s`ks` `s``s`ks``s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si``s`k`s`kk``s`k`sik`k`k k`k`k`ki```s``s`ksk``s``s`kski``s``s`kski`````s``s``s`ksk`k``sii``s``s`ksk` k``sii``s`k`s`k`s``s``s`ki``s``si`k`k`k`k`ki`kk`k`ki``s`k`s``s`ks``s`k`s`k` `s``s`ks``s`kk``s`ks``s`k`sik`kk``s``s`ksk`k``si`kk``s``s`ks``s`k`s`ks`s`kk `k`k``si`k`ki`s``s`ksk````s``s``s`ksk`k``sii``s``s`ksk`k``sii``s`k`s``s``s` ks``s`kk``s`ks``s`k`sik`kk``s`k`s``s``s`ki``s``si`k`k`ki`kk`k`ki``s``s`ksk` k``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s`k`s`kk``s``s`ksk`k``s`k`s`k`si`` s`k`s`kk``s`k`sik`k`kk`k`k`ki```s``s`ksk``s``s`kski``s``s`kski```sii```sii` `s``s`kski
実行する
この MAIN
を変換したものを実行します。結果が表示されるまでに3分くらいかかりますけどね。
はい。
まとめ
Lazy_K を使うプロジェクトで人が足りなくなったらいつでも呼んでください。
私からは以上です。