👻

プログラミング言語Shenのざっくりした紹介

2023/02/07に公開

この記事はまだ未完成です。
何回かにわけて記事を書いていきます。

プログラミング言語Shenのざっくりした紹介

ShenはLispの方言の1つで静的な型付けShenは強力な型システムや、関数型プログラミング言語をサポートしています。

実行の仕方

ブラウザでShenを実行できるようにした。
ただし、一部の機能のみ。

https://startling-yeot-d8ff86.netlify.app/

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])
GitHubで編集を提案

Discussion