An implementation of a parser, evaluator, printer, and visualizer for SKI.
This project includes VS Code workspace settings that require the following extensions:
- Deno - Official Deno extension for TypeScript support, linting, and IntelliSense
The .vscode/settings.json file configures:
- Enables the Deno extension for this workspace
- Disables the built-in TypeScript language server to avoid conflicts
- Configures Deno linting and import suggestions
- Install the Deno extension in VS Code
- Clone the repository
- Open the project in VS Code - the workspace settings will automatically apply
This project uses Deno's built-in task runner for standardized development workflows:
Build AssemblyScript WebAssembly modules:
# Build both debug and release versions
deno task build
# Build individual versions
deno task build:debug
deno task build:releaseRun the test suite:
# Run tests only
deno task test
# Run full CI pipeline (build + test)
deno task cibuild- Build both debug and release AssemblyScript modulesbuild:debug- Build debug version onlybuild:release- Build release version onlytest- Run the test suiteci- Run full CI pipeline (build then test)
You can experiment with the library interactively using Deno's REPL:
deno repl --allow-readimport {
parseSKI,
prettyPrintSKIExpression,
symbolicEvaluator,
} from "jsr:@maxdeliso/typed-ski";
const expr = parseSKI("(K S) I");
const result = symbolicEvaluator.reduce(expr);
console.log(prettyPrintSKIExpression(result)); // "S"For a comprehensive library of curated examples, see the JSR module documentation.
- Combinators: A Centennial View, Stephen Wolfram
- To Mock a Mockingbird, Raymond Smullyan
- Combinatory Logic Volume I, Haskell Brooks Curry & Robert Feys
- D. A. Turner, "A new implementation technique for applicative languages," Software: Practice and Experience, vol. 9, no. 1, pp. 31-49, 1979. DOI: 10.1002/spe.4380090105
- W. Stoye, T. J. W. Clarke, and A. C. Norman, "Some practical methods for rapid combinator reduction," in Proceedings of the 1984 ACM Symposium on LISP and Functional Programming (LFP '84), ACM, New York, NY, USA, pp. 159-166, 1984. DOI: 10.1145/800055.802038
- H. G. Baker, "CONS should not CONS its arguments, or, a lazy alloc is a smart alloc," ACM SIGPLAN Notices, vol. 27, no. 3, pp. 24-34, 1992. DOI: 10.1145/130854.130858