This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*****i*i*i*ii*ii*ii***i*i*i*ii***i*i*i*ii**i*i*ii*i*i*i*ii***i*i*i*ii**i*i*ii** | |
i*i*i*ii**i*i*ii*i*i*i*ii***i*i*i*ii***i*i*i*ii**i*i*ii*i*i*i*ii***i*i*i*ii**i* | |
i*ii*i*i*ii***i*i*i*ii**i*i*ii*i*i*i*ii***i*i*i*ii**i*i*ii**i*i*i*ii***i*i*i*ii | |
**i*i*ii***i*i*i*ii*ii**i*i*ii*i*i*ii***i*i*i*ii***i*i*i*ii***i*i*i*ii*ii**i*i* | |
ii*i*i*ii**i*i*ii***i*i*i*ii*ii**i*i*ii**i*i*ii*ii**i*i*ii*****i*i*i*ii***i*i*i | |
*ii**i*i*ii*i*i*i*ii*i*i*ii***i*i*i*ii***i*i*i*ii**i*i*ii*i*i*i*ii*i*i*ii*ii*** | |
**i*i*i*ii***i*i*i*ii*ii*ii*ii***i*i*i*ii***i*i*i*ii**i*i*ii*i*i*i*ii*i*i*ii*ii | |
***i*i*i*ii**i*i*ii**i*i*i*ii***i*i*i*ii*ii**i*i*ii**i*i*ii*ii*i*i*ii***i*i*i*i | |
i***i*i*i*ii*ii**i*i*ii***i*i*i*ii***i*i*i*ii**i*i*ii*i*i*i*ii***i*i*i*ii**i*i* | |
ii**i*i*i*ii**i*i*ii*i*i*i*ii***i*i*i*ii**i*i*ii**i*i*i*ii**i*i*ii*i*i*ii***i*i |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# calculates the sum of integers between 1 to 100. | |
`k`````sii``s`k``s`k`s``s`ks``s`kk``s``s``s``si`k``s``s`ks``s`k`s`ks``s`k`s`k`s | |
``s`k`s`k`s``s`k`````ss`ss``ss`ki``s`ksk``s`k`sikk``s`k`s`kk``s``s`ks``s`kk``si | |
`k``s`k`sik`kk``s``s`ks``s`k`s`ks`s`kk`k`k`s``s`ksk``s`k`s`kk``s``s`ks``s``s`ks | |
k`k`s``s`ksk`k`k`ki`k``s``s`ks``s`kk``s`ks``s`k`sik`kk`k`ki`k`ki``s`kk``s``s`ks | |
``s`kk``s`ks``s`k`s`ks``s`k`s`kk``s``s`ks``s`k`si`s`kk`k`ki`k``s`kk``s`k`s``s`k | |
s``s`k`si``s`kk```s``s``si``ss``ss`ki```ss``ssi``ss`kis``s`ksk``s`kkk``sii````` | |
`s``s`kski```ss```ss`ss``ss`ki``s`ksk``s`k`s``si`k`s``s`ksk``s``s`ksk`k`s``s`ks | |
k`k`kii`k```sii```sii``s``s`kski |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#概要 | |
Lazy Kで、無限拡張版九九とクワインを作った(後者は作り直した)。 | |
#なぜLazy Kを選んだか | |
入力にプログラムを適用した結果を出力とするというシンプルさ、S、K、Iのたった3つの関数であらゆるプログラムを記述できるという性質が非常に美しいから。 | |
#無限九九 | |
九九を無限×無限に拡張した。1以上の自然数からそのデカルト冪へ1つずつ対応させる。 | |
`k`````sii``s`k``s`k`s``s`ks``s`kk``s``s`k```s``s`ks``s`k`s`ks``s`k`s`kk``s`k`s`ks`s`kk``s`k`s`k`s`k`s`k``s`k`s``si`k``s`k``s``s`kski````s``s`ksk```sii``s``s`kski`s``s`ksk```s``siii``s``s`kskik``s``s`ks``s`kk``s`ks``s`k`s`ks`s`kk``s`k`s`k`s`k`s`k``s`k`s``si`k``s``s`ksk``s`k``s``s`kski``s``s`ksk``s``s`ksk``s``s`ksk```sii``s``s`ksk``s``s`kskik``s``s`ks``s`k`s`ks``s`k`s`k`s`ks``s`k`s`k`s`kk``s``s`ks``s`kk``s`ksk`k``s`ksk`k`k`k``s`k`s``si`k``s`k``s``s`kski``s``s`ksk```sii``s``s`kskik```sii``s`k``s`k`s``s`ks``s`kk``s``s``s``si`k``s``s`ks``s`k`s`ks``s`k`s`k`s``s`k`s`k`s``s`k````s``s`kski``s``s`ksk``s``s`kski``s`k`sikk``s`k`s`kk``s``s`ks``s`kk``si`k``s`k`sik`kk``s``s`ks``s`k`s`ks`s`kk`k`k`s``s`ksk``s`k`s`kk``s``s`ks``s``s`ksk`k`s``s`ksk`k`k`ki`k``s``s`ks``s`kk``s`ks``s`k`sik`kk`k`ki`k`ki``s`kk``s``s`ks``s`kk``s`ks``s`k`s`ks``s`k`s`kk` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
111100111111100011111110001111111110000011110011111110001111001111111100011111111 | |
100000111111111000001111111000111111100011110011111000111001111111110000011111110 | |
001111111000111100111110001110011111111000111111100011110011111000111001111111110 | |
000011111110001111111000111100111110001110011111111000111111111000001111111110000 | |
011111110001111111000111100111110001110011111111100000111100111111100011111110001 | |
111111110000011110011111110001111111000111100111110001110011111111000111111100011 | |
110011111000111001111111110000011111110001111001111111000111111100011110011111000 | |
111001111111110000011111110001111111000111100111110001110011111111000111111111000 | |
001111111110000011111110001111111000111100111110001110011111111100000111100111111 | |
100011111110001111111110000011110011111110001111001111111100011111111100000111111 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
「Xの中にあるアルファベットを、Xを括弧で括ったもので置き換えた文章は真実であるとも虚構であるとも断定できない。」 | |
の中にあるアルファベットを、 | |
「Xの中にあるアルファベットを、Xを括弧で括ったもので置き換えた文章は真実であるとも虚構であるとも断定できない。」 | |
を括弧で括ったもので置き換えた文章は真実であるとも虚構であるとも断定できない。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Control.Applicative | |
infixl 9 :$ | |
data Expr = Lambda String Expr -- Lambda term | |
| Free String -- Free variable | |
| S | K | I -- SKI combinator | |
| Expr :$ Expr -- Application | |
-- transformation which converts a lambda term to a SKI combinator | |
unabstractLambda :: String -- name of the formal parameter |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
「抽象除去」は、ラムダ抽象をSKIコンビネータによる表現にする手続きのことである。 | |
式Eに対して抽象除去を行った結果を、T[E]と表記する。 | |
抽象除去の規則は以下の通りである。 | |
0.T[x] → x | |
1.T[f g] → T[f] T[g] | |
2.T[λx.x] → I | |
3.T[λx.f g] → S T[λx.f] T[λx.g] | |
4.T[λx.λy.z] → T[λx.T[λy.z]] | |
5.T[λx.e(それ以外)] → K e |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
data ExprP = Var String | Apply ExprP ExprP | Lambda String ExprP -- lambda calculus expression | |
data Expr = I | K | S | Expr :$ Expr | Free String -- combinatory expression | |
compile :: ExprP -> Expr | |
compile (Apply f x) = compile f :$ compile x | |
compile (Lambda p e) = bindee p $ compile e | |
compile (Var i) = Free i | |
bindee :: String -> Expr -> Expr |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
``s``s`ks``s`k`si``s`kk``s`k```s``s`ksk``s`k```sii``s``s`kski``s``s`ksk```s``si | |
ii``s``s`kski`s``s`ksk``s``s``s``s```sii``s`k``s`k`s``s``s`k``si`kk``s``s``s``s | |
i`k`ki`kk`k``si`k`ki`k`````ss```ss`ss``ss`ki``s`ksk``s`k`s``si`k`kik``s``si`kk` | |
k```sii``s`k``s`k`s``si`k`kik``sii``si`kk``s``s`ksk`k``si`k`ki``sii`k``s``si`k` | |
ki`kk`k`ki`k```ss```ss`ss``ss`ki``s`ksk`k`ki`k`k``s``si`k```ss```ss`ss``ss`ki`` | |
s`ksk`k`k```sii```sii``s``s`kski |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Control.Arrow (arr, (&&&), (>>>), app) | |
import Prelude (id, const, uncurry) | |
flip = (const const >>> (>>>)) &&& (&&&) >>> app >>> (>>> (>>> app)) | |
(.) = flip (>>>) | |
curry = const ((,) >>>) &&& (.) >>> app | |
fst = uncurry const |