Discuss Scratch
- pupon
-
Scratcher
100+ posts
プログラミング言語を作ろう(合作ではないです)
$igns v0.7
v0.5で複数引数のラムダ式
v0.6でクラス、連結リスト
v0.7で継承、計算型プロパティ(Swift参考)
が追加されました。
構文
v0.5で複数引数のラムダ式
v0.6でクラス、連結リスト
v0.7で継承、計算型プロパティ(Swift参考)
が追加されました。
構文
class クラス名: 親クラス {
メンバ定義、コンストラクタ
get 計算型プリパティ = {^ 内容}
}
a = [^ 1, 2, 3]
a.append~4 #4を追加
a.remove~2 #2番目を削除
a.insert~1~100 #1番目に100を挿入Last edited by pupon (Nov. 7, 2024 10:13:42)
- akku--n11
-
Scratcher
1000+ posts
プログラミング言語を作ろう(合作ではないです)
お久しぶりです
最近Panzoid風のFPSIイントロみたいなアニメーション用のエンジン作りたいなーとか
ScratchにWASM移植したいなーとか思いつつ何も出來てない人です
WASMをもうちょっと勉強してから実装してみたいと思います
最近Panzoid風のFPSIイントロみたいなアニメーション用のエンジン作りたいなーとか
ScratchにWASM移植したいなーとか思いつつ何も出來てない人です
WASMをもうちょっと勉強してから実装してみたいと思います
- pupon
-
Scratcher
100+ posts
プログラミング言語を作ろう(合作ではないです)
新たな言語Fsm+
お久しぶりです。
新たにFsm+という言語を作っています。名前の由来はFunctionのFとCsm(自作言語)のsmです。
純粋関数型言語です。そして一番の特徴が「(トランス)コンパイル言語であること」です。
自作のアセンブリ言語?に変換して実行します。(ちなみにそのアセンブリ言語はスタックベース)
<構文>
コメントは//です。複数文はないです。
型
静的型付けです。型推論はそれなりに(?)できます。
演算子など
(四則演算、論理演算、比較演算などは略)
関数
関数は引数が複数あるものはカリー化されます。(糖衣構文)
let式
それだけ。
入出力
お久しぶりです。
新たにFsm+という言語を作っています。名前の由来はFunctionのFとCsm(自作言語)のsmです。
純粋関数型言語です。そして一番の特徴が「(トランス)コンパイル言語であること」です。
自作のアセンブリ言語?に変換して実行します。(ちなみにそのアセンブリ言語はスタックベース)
<構文>
コメントは//です。複数文はないです。
型
静的型付けです。型推論はそれなりに(?)できます。
3 //Int
1.2 //Float
true //Bool
"Hello" //String
\x -> "hello"+x //String -> String
\x -> x*x //<a': Num> a' -> a'
\x -> x //a' -> a'
[1, 2, 3] //[Int] == Array<Int>
(3, "foo") //(Int, String)
演算子など
(四則演算、論理演算、比較演算などは略)
join "Hello" "World" //関数適用 並べるだけ
print $ 1+2 //Haskellの$と同じ
[1, 2] |> map (\x -> x*2) //パイプライン演算子
f << g //関数合成 \x -> f $ g x
f >> g // g << f と同じ
["a", "b"]@0 //配列の要素取得
関数
関数は引数が複数あるものはカリー化されます。(糖衣構文)
\a b -> a+b
↕︎
\a -> \b -> a+b
let式
let a: Int = 5 in
let b = 3 in
a+b
入出力
do {
print "Hello"
x <- input
print x
}print "Hello" >>= (\_ ->
input >>= (\x ->
print x
)
)
Last edited by pupon (July 2, 2025 09:28:18)
- pupon
-
Scratcher
100+ posts
プログラミング言語を作ろう(合作ではないです)
Fsm+の型定義
構造体
struct 型名 = {フィールド名: 型, …}
列挙型
enum 型名 = 名前 | 名前 | …
特に説明することない気がする
代数的データ型
data 型名 = 値コンストラクタ 型 型 … | …
構造体
struct 型名 = {フィールド名: 型, …}
struct Point = {x: Int, y: Int} struct Line = {start: Point, end: Point} @main { let a = Point 1 2 //この書き方は部分適用も可能 let b = Point {x: 5, y: 8} let c = a |> set y 4 print (a |> get x) //1 print c //Point {x: 1, y: 4} let d = Line {start: Point {x: 1, y: 3}, end: Point {x: 5, y: 1}} print (d |> get start.x) //1 let e = d |> set end.x 10 print e //Line {start: Point {x: 1, y: 3}, end: Point {x: 10, y: 1}} }
列挙型
enum 型名 = 名前 | 名前 | …
特に説明することない気がする
代数的データ型
data 型名 = 値コンストラクタ 型 型 … | …
data Maybe<T> = just T | nothing data List<T> = cons T List<T> | nil @main { let a = Maybe.just 3 let b = match a { .just x => x; .nothing => 0 } print b //3 let c: List<Int> = .cons 1 (.cons 2 3) match a { cons x _ => print x; nil => print "nil" } //1 }
Last edited by pupon (March 18, 2025 12:08:11)
- pupon
-
Scratcher
100+ posts
プログラミング言語を作ろう(合作ではないです)
Fsm+が静的型付けなので、Hindley–Milner(Algorithm J)の型推論を作りました。
(結構大変でした)
https://scratch.mit.edu/projects/1133240451/
(結構大変でした)
https://scratch.mit.edu/projects/1133240451/
Last edited by pupon (March 24, 2025 04:39:36)
- hikari2014
-
Scratcher
1 post
プログラミング言語を作ろう(合作ではないです)
ここ1年間(2年かも)言語もどきしか作っていない人です、ちょくちょく参加します!最新型:https://scratch.mit.edu/projects/1229618777/ AVPLCX(Advanced Programm langauge(もどき) Code:Xclauc)です
Last edited by hikari2014 (Oct. 17, 2025 05:45:03)


