Skip to content

Instantly share code, notes, and snippets.

View fumieval's full-sized avatar
🐦
Birb

Fumiaki Kinoshita fumieval

🐦
Birb
View GitHub Profile
@fumieval
fumieval / gist:2469354
Created April 23, 2012 07:27
Iota <-> Jot
*****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
# 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
@fumieval
fumieval / gist:2585306
Created May 3, 2012 12:23
最初にこれを書けば良かったのに
#概要
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`
111100111111100011111110001111111110000011110011111110001111001111111100011111111
100000111111111000001111111000111111100011110011111000111001111111110000011111110
001111111000111100111110001110011111111000111111100011110011111000111001111111110
000011111110001111111000111100111110001110011111111000111111111000001111111110000
011111110001111111000111100111110001110011111111100000111100111111100011111110001
111111110000011110011111110001111111000111100111110001110011111111000111111100011
110011111000111001111111110000011111110001111001111111000111111100011110011111000
111001111111110000011111110001111111000111100111110001110011111111000111111111000
001111111110000011111110001111111000111100111110001110011111111100000111100111111
100011111110001111111110000011110011111110001111001111111100011111111100000111111
@fumieval
fumieval / gist:2692789
Created May 14, 2012 08:47
決定不能新聞
「Xの中にあるアルファベットを、Xを括弧で括ったもので置き換えた文章は真実であるとも虚構であるとも断定できない。」
の中にあるアルファベットを、
「Xの中にあるアルファベットを、Xを括弧で括ったもので置き換えた文章は真実であるとも虚構であるとも断定できない。」
を括弧で括ったもので置き換えた文章は真実であるとも虚構であるとも断定できない。
@fumieval
fumieval / unabstract.hs
Created May 15, 2012 07:25
Abstraction elimination
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
「抽象除去」は、ラムダ抽象を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
@fumieval
fumieval / gist:2793825
Created May 26, 2012 12:47
The essence of Lazy Z compiler
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
@fumieval
fumieval / gist:2795828
Created May 27, 2012 01:30
偶奇判定
``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
import Control.Arrow (arr, (&&&), (>>>), app)
import Prelude (id, const, uncurry)
flip = (const const >>> (>>>)) &&& (&&&) >>> app >>> (>>> (>>> app))
(.) = flip (>>>)
curry = const ((,) >>>) &&& (.) >>> app
fst = uncurry const