Type-level Scheme interpreter in TypeScript
npm install ts-type-level-schemeType-level Scheme interpreter in TypeScript.
``typescript
import type { Scheme } from "ts-type-level-scheme";
type Reverse
"begin",
[
"define",
["reverse", "rest", "result"],
[
"if",
["null?", "rest"],
"result",
["reverse", ["cdr", "rest"], ["cons", ["car", "rest"], "result"]]
]
],
["reverse", ["quote", array], ["quote", []]]
];
type reversed = Scheme
// ^? type reversed = [undefined, null, true, "a", 1]
`
`typescript
import type { Scheme } from "ts-type-level-scheme";
type Fib
"begin",
[
"define",
["fib", "n"],
[
"cond",
[["=", "n", 0], 0],
[["=", "n", 1], 1],
["else", ["+", ["fib", ["-", "n", 1]], ["fib", ["-", "n", 2]]]]
]
],
["fib", n]
];
type fib_0 = Scheme
// ^? type fib_0 = 0
type fib_1 = Scheme
// ^? type fib_1 = 1
type fib_2 = Scheme
// ^? type fib_2 = 1
type fib_3 = Scheme
// ^? type fib_3 = 2
type fib_4 = Scheme
// ^? type fib_4 = 3
type fib_5 = Scheme
// ^? type fib_5 = 5
type fib_6 = Scheme
// ^? type fib_6 = 8
`
- set!, set-car!, and set-cdr! are not implemented.quote
- Only the following special forms are available:
- define
- if
- lambda
- cond
- begin
- +
- Only natural numbers including zero are supported for numbers.
- Due to the limitation of tsc, heavy computation will result in TS2589 error.
- Only the following primitive procedures can be used:
- -
- *
- /
- remainder
- =
- <
- <=
- >
- >=
- and
- or
- null?
- cons
- car
- cdr
- list
- append`
-
MIT