parent
c421f4123d
commit
b8390cda26
@ -0,0 +1 @@ |
|||||||
|
{"pid":0,"tid":0,"displayTimeUnit":"ns","traceEvents":[{"name":"Succ (Succ Zero) `0` (\\ p . `deferred`)","cat":"call","ph":"X","ts":156657.004,"dur":4630.765999999994,"args":{"cat":"call","id":81,"bindings":{},"result":"`2`"}},{"name":"Succ (Succ Zero) `0`","cat":"call","ph":"X","ts":156937.875,"dur":1203.091999999998,"args":{"cat":"call","id":79,"bindings":{},"result":"\\ n . n p"}},{"name":"Succ (Succ Zero)","cat":"call","ph":"X","ts":156964.502,"dur":999.0829999999846,"args":{"cat":"call","id":77,"bindings":{},"result":"\\ _ n . n p"}},{"name":"Succ","cat":"deref","ph":"X","ts":157046.28,"dur":165.08000000001744,"args":{"cat":"deref","id":44,"bindings":{},"result":"\\ p _ n . n p"}},{"name":"p = Succ Zero","cat":"binding","ph":"X","ts":157596.17700000003,"dur":191.69899999999984,"args":{"cat":"binding","result":"\\ _ n . n p"}},{"name":"_ = `0`","cat":"binding","ph":"X","ts":158066.72,"dur":31.12400000000548,"args":{"cat":"binding","result":"\\ n . n p"}},{"name":"n = \\ p . `deferred`","cat":"binding","ph":"X","ts":158272.001,"dur":33.950000000004366,"args":{"cat":"binding","result":"n p"}},{"name":"n p","cat":"call","ph":"X","ts":158348.008,"dur":2912.5020000000177,"args":{"cat":"call","id":95,"bindings":{},"result":"`2`"}},{"name":"n","cat":"deref","ph":"X","ts":158369.886,"dur":17.241999999981772,"args":{"cat":"deref","id":94,"bindings":{},"result":"\\ p . `deferred`"}},{"name":"p = p","cat":"binding","ph":"X","ts":158425.804,"dur":83.39300000000094,"args":{"cat":"binding","result":"`deferred`"}},{"name":"`deferred`","cat":"deferred","ph":"X","ts":158620.56999999998,"dur":2614.6190000000047,"args":{"cat":"deferred","id":96,"bindings":{},"result":"`2`"}},{"name":"p `0` (\\ p . `deferred`)","cat":"call","ph":"X","ts":158825.965,"dur":2367.5389999999934,"args":{"cat":"call","id":100,"bindings":{},"result":"`1`"}},{"name":"p `0`","cat":"call","ph":"X","ts":158855.655,"dur":527.1789999999896,"args":{"cat":"call","id":98,"bindings":{},"result":"\\ n . n p"}},{"name":"p","cat":"deref","ph":"X","ts":158870.886,"dur":410.04099999997834,"args":{"cat":"deref","id":90,"bindings":{},"result":"\\ _ n . n p"}},{"name":"Succ Zero","cat":"call","ph":"X","ts":158883.601,"dur":256.76500000000146,"args":{"cat":"call","id":76,"bindings":{},"result":"\\ _ n . n p"}},{"name":"Succ [cached]","cat":"deref","ph":"X","ts":158898.10199999998,"dur":11.87500000000341,"args":{"cat":"deref","id":44,"bindings":{},"result":"\\ p _ n . n p"}},{"name":"p = Zero","cat":"binding","ph":"X","ts":159030.766,"dur":50.10999999998944,"args":{"cat":"binding","result":"\\ _ n . n p"}},{"name":"_ = `0`","cat":"binding","ph":"X","ts":159331.049,"dur":16.565999999983205,"args":{"cat":"binding","result":"\\ n . n p"}},{"name":"n = \\ p . `deferred`","cat":"binding","ph":"X","ts":159416.566,"dur":34.87000000001217,"args":{"cat":"binding","result":"n p"}},{"name":"n p","cat":"call","ph":"X","ts":159496.194,"dur":1663.6980000000108,"args":{"cat":"call","id":108,"bindings":{},"result":"`1`"}},{"name":"n","cat":"deref","ph":"X","ts":159508.905,"dur":18.496999999996433,"args":{"cat":"deref","id":107,"bindings":{},"result":"\\ p . `deferred`"}},{"name":"p = p","cat":"binding","ph":"X","ts":159559.526,"dur":17.22300000000132,"args":{"cat":"binding","result":"`deferred`"}},{"name":"`deferred`","cat":"deferred","ph":"X","ts":159623.762,"dur":1484.644000000003,"args":{"cat":"deferred","id":109,"bindings":{},"result":"`1`"}},{"name":"p `0` (\\ p . `deferred`)","cat":"call","ph":"X","ts":159688.99899999998,"dur":1330.6300000000135,"args":{"cat":"call","id":113,"bindings":{},"result":"`0`"}},{"name":"p `0`","cat":"call","ph":"X","ts":159707.248,"dur":1215.9960000000183,"args":{"cat":"call","id":111,"bindings":{},"result":"\\ _ . z"}},{"name":"p","cat":"deref","ph":"X","ts":159722.568,"dur":165.2430000000038,"args":{"cat":"deref","id":103,"bindings":{},"result":"\\ z _ . z"}},{"name":"Zero","cat":"deref","ph":"X","ts":159733.117,"dur":96.05600000000436,"args":{"cat":"deref","id":42,"bindings":{},"result":"\\ z _ . z"}},{"name":"z = `0`","cat":"binding","ph":"X","ts":159931.713,"dur":944.1280000000063,"args":{"cat":"binding","result":"\\ _ . z"}},{"name":"_ = \\ p . `deferred`","cat":"binding","ph":"X","ts":160955.41199999998,"dur":12.740000000007967,"args":{"cat":"binding","result":"z"}},{"name":"z","cat":"deref","ph":"X","ts":160988.294,"dur":12.250999999992018,"args":{"cat":"deref","id":119,"bindings":{},"result":"`0`"}}]} |
||||||
@ -1,50 +1,50 @@ |
|||||||
import { Term, _, _l, cnst, g, n } from './core'; |
import { Term, _, _l, cnst, g, n } from './core'; |
||||||
import { iif } from './bool'; |
import { iif } from './bool'; |
||||||
import { toNumber as $n, Zero, fromNumber as _n, cmp as ncmp, eq as neq, even as neven, ge as nge, gt as ngt, le as nle, lt as nlt, odd as nodd, pred, succ } from './num'; |
import { toNumber as $n, Zero, fromNumber as _n, cmp as ncmp, eq as neq, even as neven, ge as nge, gt as ngt, le as nle, lt as nlt, odd as nodd, succ } from './num'; |
||||||
import { Pair, snd, uncurry } from './pair'; |
import { Pair, snd, uncurry } from './pair'; |
||||||
|
|
||||||
n('byte'); |
n('byte'); |
||||||
|
|
||||||
export const x00 = g('x00', Pair._(_n(255))._(Zero)); |
export const x00 = g('x00', Pair(_n(255))(Zero)); |
||||||
|
|
||||||
export const xFF = g('xFF', Pair._(Zero)._(_n(255))); |
export const xFF = g('xFF', Pair(Zero)(_n(255))); |
||||||
|
|
||||||
export const Inc = g('Inc', uncurry._(_l(i => _l(s => i._(x00)._(_l(pi => Pair._(pi)._(succ._(s)))))))); |
export const Inc = g('Inc', uncurry(i => s => i(x00)(pi => Pair(pi)(succ(s))))); |
||||||
|
|
||||||
export const ifz = g('ifz', _l(n => _l(t => _l(f => snd._(n)._(t)._(cnst._(f)))))); |
export const ifz = g('ifz', n => t => f => snd(n)(t)(cnst(f))); |
||||||
|
|
||||||
export const inc = g('inc', Inc); |
export const inc = g('inc', Inc); |
||||||
|
|
||||||
export const dec = g('dec', _l(n => uncurry._(_l(i => _l(s => s._(xFF)._(_l(ps => Pair._(succ._(i))._(ps))))))._(n))); |
export const dec = g('dec', n => uncurry(i => s => s(xFF)(ps => Pair(succ(i))(ps)))(n)); |
||||||
|
|
||||||
export const cmp = g('cmp', _l(l => _l(r => ncmp._(snd._(l))._(snd._(r))))); |
export const cmp = g('cmp', l => r => ncmp(snd(l))(snd(r))); |
||||||
|
|
||||||
export const lt = g('lt', _l(l => _l(r => nlt._(snd._(l))._(snd._(r))))); |
export const lt = g('lt', l => r => nlt(snd(l))(snd(r))); |
||||||
|
|
||||||
export const le = g('le', _l(l => _l(r => nle._(snd._(l))._(snd._(r))))); |
export const le = g('le', l => r => nle(snd(l))(snd(r))); |
||||||
|
|
||||||
export const eq = g('eq', _l(l => _l(r => neq._(snd._(l))._(snd._(r))))); |
export const eq = g('eq', l => r => neq(snd(l))(snd(r))); |
||||||
|
|
||||||
export const ge = g('ge', _l(l => _l(r => nge._(snd._(l))._(snd._(r))))); |
export const ge = g('ge', l => r => nge(snd(l))(snd(r))); |
||||||
|
|
||||||
export const gt = g('gt', _l(l => _l(r => ngt._(snd._(l))._(snd._(r))))); |
export const gt = g('gt', l => r => ngt(snd(l))(snd(r))); |
||||||
|
|
||||||
export const even = g('even', _l(l => _l(r => neven._(snd._(l))._(snd._(r))))); |
export const even = g('even', l => r => neven(snd(l))(snd(r))); |
||||||
|
|
||||||
export const odd = g('odd', _l(l => _l(r => nodd._(snd._(l))._(snd._(r))))); |
export const odd = g('odd', l => r => nodd(snd(l))(snd(r))); |
||||||
|
|
||||||
export const sum = g('sum', _l(l => _l(r => snd._(r)._(l)._(_l(_ => sum._(inc._(l))._(dec._(r))))))); |
export const sum = g('sum', l => r => snd(r)(l)(_ => sum(inc(l))(dec(r)))); |
||||||
|
|
||||||
export const sub = g('sub', _l(l => _l(r => snd._(r)._(l)._(_l(_ => sub._(dec._(l))._(dec._(r))))))); |
export const sub = g('sub', l => r => snd(r)(l)(_ => sub(dec(l))(dec(r)))); |
||||||
|
|
||||||
export const mul = g('mul', _l(l => _l(r => snd._(l)._(x00)._(_l(_ => sum._(r)._(mul._(dec._(l))._(r))))))); |
export const mul = g('mul', l => r => snd(l)(x00)(_ => sum(r)(mul(dec(l))(r)))); |
||||||
|
|
||||||
export const div = g('div', _l(l => _l(r => iif._(lt._(l)._(r))._(x00)._(inc._(div._(sub._(l)._(r))._(r)))))); |
export const div = g('div', l => r => iif(lt(l)(r))(x00)(inc(div(sub(l)(r))(r)))); |
||||||
|
|
||||||
export const mod = g('mod', _l(l => _l(r => iif._(lt._(l)._(r))._(l)._(mod._(sub._(l)._(r))._(r))))); |
export const mod = g('mod', l => r => iif(lt(l)(r))(l)(mod(sub(l)(r))(r))); |
||||||
|
|
||||||
export const byte = g('byte', _l(n => n._(x00)._(_l(pn => inc._(byte._(pn)))))); |
export const byte = g('byte', n => n(x00)(pn => inc(byte(pn)))); |
||||||
|
|
||||||
export const fromNumber: (n: number) => Term = n => !n ? x00 : Inc._(_(() => fromNumber(n - 1))); |
export const fromNumber: (n: number) => Term = n => !n ? x00 : Inc(_(() => fromNumber(n - 1))); |
||||||
|
|
||||||
export const toNumber: (n: Term) => number = n => $n(snd._(n)); |
export const toNumber: (n: Term) => number = n => $n(snd(n)); |
||||||
|
|||||||
@ -1,14 +1,16 @@ |
|||||||
|
import { run } from './bf'; |
||||||
import { dump, log, profile } from './debug'; |
import { dump, log, profile } from './debug'; |
||||||
import { _ } from './core'; |
import { fromString, toString } from './string'; |
||||||
import { fromNumber, mul, toNumber } from './byte'; |
|
||||||
|
|
||||||
log(); |
log(); |
||||||
profile(); |
profile(); |
||||||
|
|
||||||
const program = mul._(fromNumber(1))._(fromNumber(10)); |
const program = run |
||||||
|
._(fromString('+')) |
||||||
|
._(fromString('')); |
||||||
|
|
||||||
try { |
try { |
||||||
console.log(program.stringify(), ' -> ', toNumber(program)); |
console.log(program.stringify(), ' -> ', toString(program)); |
||||||
} finally { |
} finally { |
||||||
dump(); |
dump(); |
||||||
} |
} |
||||||
|
|||||||
@ -1,7 +1,7 @@ |
|||||||
import { _, _l } from './core'; |
import { _, _l } from './core'; |
||||||
import { toString } from './string'; |
import { toString } from './string'; |
||||||
|
|
||||||
export const log = _l(s => _l(p => _(({ s, p }) => { |
export const log = _l(s => p => _(({ s, p }) => { |
||||||
console.log(toString(s)); |
console.log(toString(s)); |
||||||
return p; |
return p; |
||||||
}))); |
})); |
||||||
|
|||||||
Loading…
Reference in new issue