0.2.27 • Published 3 years ago

hvm-js v0.2.27

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

HVM on JavaScript

HVM is now available as a JavaScript library!

Installing

npm i --save hvm-js

Examples

Evaluating a term to normal form

import hvm from "hvm-js";

// Instantiates an HVM runtime given a source code
var rt = await hvm.runtime(`
  (U60.sum 0) = 0
  (U60.sum n) = (+ n (U60.sum (- n 1)))
`);

console.log(rt.eval("(U60.sum 10000000)"));

Evaluating to weak head normal form

import hvm from "hvm-js";

// Instantiates an HVM runtime given a source code
var rt = await hvm.runtime(`
  (U60.sum 0) = 0
  (U60.sum n) = (+ n (U60.sum (- n 1)))
`);

// Allocates an expression without reducing it
let loc = rt.alloc_code("(U60.sum 10)");

// Reduces it to weak head normal form:
rt.reduce(loc);

// If the result is a number, print its value:
let term = rt.at(loc);
if (rt.get_tag(term) == rt.NUM) {
  console.log("Result is Num(" + rt.get_val(term) + ")");
}

Running an IO program

import hvm from "hvm-js";

var rt = await hvm(`
  Main =
    (IO.do_output "Name: " λ_
    (IO.do_input           λname
    (IO.do_output "Hi, "   λ_
    (IO.do_output name     λ_
    (IO.done 42)))))
`);

await rt.run_io_term({$: "Fun", name: "Main", args: []});
console.log("");
0.2.27

3 years ago

0.2.26

3 years ago

0.2.25

3 years ago

0.2.24

3 years ago

0.2.23

3 years ago

0.2.21

3 years ago

0.2.20

3 years ago

0.2.19

3 years ago

0.2.18

3 years ago

0.2.17

3 years ago

0.2.16

3 years ago

0.2.15

3 years ago

0.2.14

3 years ago

0.2.13

3 years ago

0.2.12

3 years ago

0.2.11

3 years ago

0.2.10

3 years ago

0.2.9

3 years ago

0.2.8

3 years ago

0.2.7

3 years ago

0.2.6

3 years ago

0.2.5

3 years ago

0.2.4

3 years ago

0.2.3

3 years ago

0.2.2

3 years ago

0.2.1

3 years ago

0.2.0

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.75

3 years ago

0.1.74

3 years ago