Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rgrannell1/visp
Toy vau-calculus language with non-sexpr syntax
https://github.com/rgrannell1/visp
functional-programming lambda-calculus toy-language vau-calculus
Last synced: 7 days ago
JSON representation
Toy vau-calculus language with non-sexpr syntax
- Host: GitHub
- URL: https://github.com/rgrannell1/visp
- Owner: rgrannell1
- Created: 2019-04-14T02:48:40.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-02-11T00:38:05.000Z (almost 3 years ago)
- Last Synced: 2024-04-14T11:06:32.286Z (7 months ago)
- Topics: functional-programming, lambda-calculus, toy-language, vau-calculus
- Language: JavaScript
- Homepage:
- Size: 250 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# visp
[![Build Status](https://travis-ci.org/rgrannell1/visp.svg?branch=master)](https://travis-ci.org/rgrannell1/visp)
> Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary
Visp is a toy-language built for a few purposes:
- I'd like to build a language from scratch
- I want to experiment with non-sexpr languages with metaprogramming support
- I want to implement `vau-calculus`
- I want to implement a language with lenses as the sole path management method
- If this works out, I'd like to switch to this language from Node.js> Why on earth would you want a half-baked pseudoscheme with f-expressions, which are evil?
:woman_shrugging:
I'm unconvinced you need s-expression syntax to metaprogram, and I think macros are poor substitutions for f-expressions. I often want code to inspect other code when working with JS for documentation and versioning, which is easily done with vau-calculus. Being able to *really* define new syntax is a bonus too!
So far, I've implemented:
- a parser
- an evaluator
- a standard library (WiP)
- ~~node library wrappers~~It looks like this.
```js
sym <- symbol("some js symbol")
val <- hash*(
("a" 1)
("b" 2)
(sym hash*(
("c" 3)
("d" 4))))accessor <- at-key(sym)
test <- $fn((x y)
show("hello!")
$define!(z, 3)
sum*(x y z))show(test(1 2))
show(lens-get(accessor val))
```## Standard Library
```
sum
sum*
product
product*
plus
minus
times
over
```