👻
プログラミング言語Shenのざっくりした紹介
この記事はまだ未完成です。
何回かにわけて記事を書いていきます。
プログラミング言語Shenのざっくりした紹介
ShenはLispの方言の1つで静的な型付けShenは強力な型システムや、関数型プログラミング言語をサポートしています。
実行の仕方
ブラウザでShenを実行できるようにした。
ただし、一部の機能のみ。
Sheの特徴
パターンマッチ
Shenにはパターンマッチがあります。
(define filter
_ [] -> []
F [X | Xs] -> [X | (filter F Xs)] where (F X)
F [_ | Xs] -> (filter F Xs))
(define even?
1 -> false
X -> (odd? (- X 1)))
(define odd?
1 -> true
X -> (even? (- X 1)))
(filter (even?) [1 2 3 4 5])
[2 4 6]
BACKTRACKING
(define walk
_ [] <- (fail)
F [X | _] -> X where (F X)
F [_ | Y] -> (walk F Y))
LAMBDA CALCULUS CONSISTENCY
(define y-combinator
F -> ((/. X (X X))
(/. X (F (/. Y ((X X) Y))))))
LAZY EVALUTION
(let F (freeze (output "Hello!"))
(thaw F))
"Hello!"
OPTIONAL TYPE CHECKING
(tc +)
(define map
{(A --> B) --> (list A) --> (list B)}
_ [] -> []
F [X | Xs] -> [(F X) | (map F Xs)])
(map (+ 1) ["a" "b" "c"])
type error
CONFIGURABLE TYPE RULES
(datatype maybe-type
_____________________
none : (maybe A);
X : A;
_____________________
(some X) : (maybe A);
M : (maybe A);
_____________________
(unwrap M) : A;)
INTEGRATED LOGIC ENGINE
(defprolog member
X [X | _] <-- ;
X [_ | Y] <-- (member X Y);)
(prolog?
(member X [1 2 3])
(member X [3 4 5])
(return X))
3
BUILT-IN COMPILER-COMPILER
(define bit?
B -> (element? B [0 1]))
(defcc <b>
B <b> := [B | <b>] where (bit? B);
B := [B] where (bit? B);)
UNIQUE MACROS
(defmacro infix-macro
[X + Y] -> [+ X Y]
[X * Y] -> [* X Y])
Discussion