/tmp/duangsuse.sock
解析组合子是什么? 下面会简单科普一下 LL(1)、LR(1)、LALR 和一般手写的递归下降(recursive descent)解析器的 一些 知识( 每次看到很多各种各样的线性 数据结构,比如说,字符串 不管是采用怎样的字符集、怎样的编码,字符串都是一堆可以判断相等性的『字符』组成的『序列』 那么,如果为了方便,想从这个序列里提取出一些结构(比如从 "$a . $b" 里提取 [dollar a, '.', dollar b]) 就需要一种依据序列 进行语法树推导的算法 一般被称作解析算法 LL(1)…
那么又说跑题了(而且含金量不高... 没有讲到实际实现 parser compiler 以及这些自动机本身的模型和要点)
咱来考虑一下 FP.js 应该提供怎么样的解析组合子,我希望这个解析组合子的应用尽可能要少些废话... 🤔
尤其要利用 JavaScript 的 constructor 函数,拒绝 手写....
咱来考虑一下 FP.js 应该提供怎么样的解析组合子,我希望这个解析组合子的应用尽可能要少些废话... 🤔
尤其要利用 JavaScript 的 constructor 函数,拒绝 手写....
/tmp/duangsuse.sock
目前在想... 手工检查一下(癖好)加上 FP 特性即可
This media is not supported in your browser
VIEW IN TELEGRAM
fp.js 22K 的体积(673 行)、测试们写了 16K(536 行)
Done. 171 APIs tested, 290 passed / 0 failed in 0.093 secs.Forwarded from Deleted Account
使用 FP.js 的话,也可以这么写:
const fp = require('./fp');
let makeCats = fp.stm.foldn.curry2(v => fp.fn.bound(v, 'concat').also(console.log)(
fp.stmaux.collect(fp.stm.joinMap(x => ['a' +x, 'b' +x, 'c' + x], v))
), ['a', 'b', 'c']);Forwarded from Deleted Account
这里我们使用了
foldn 是重复 N 次对某个数据执行指定操作,比如
foldn 和 joinMap foldn 是重复 N 次对某个数据执行指定操作,比如
foldn(x => x+10, 0, 10); // 100
foldn(s => s+'x', '', 100); // 'x'.repeat(100)
joinMap 是 map & joinjoinMap(x => [x.toString(), x+1], [1,2,3]);Forwarded from Deleted Account
毕竟 "aa" "ab" 这样的是通过不断重复 map 本身来做到的(不好意思... 怎么说呢,不好讲得太简洁,对不起...)
就利用 joinMap,来 join 所有这些项目,都叠加成本来
利用 joinMap 流可以做到计算
当然这里应该是惰性计算最好,因为 FP.js 本身的 原因 就 没有...
就利用 joinMap,来 join 所有这些项目,都叠加成本来
map(x => c + x, xs) (c = 'a', x='a'='z')... 'aa', ab'... 的样子利用 joinMap 流可以做到计算
当然这里应该是惰性计算最好,因为 FP.js 本身的 原因 就 没有...
/tmp/duangsuse.sock
FP.js 还差一点用于惰性计算流的操作吧...
噢... 其实 join (concatN) 就可以用于 concat2... 所以说是完全可以全部惰性计算的
Deleted Account
使用 FP.js 的话,也可以这么写: const fp = require('./fp'); let makeCats = fp.stm.foldn.curry2(v => fp.fn.bound(v, 'concat').also(console.log)( fp.stmaux.collect(fp.stm.joinMap(x => ['a' +x, 'b' +x, 'c' + x], v)) ), ['a', 'b', 'c']);
const fp = require('./fp');
let { foldn, join, map: smap, joinMap } = fp.stm;
let stmb = fp.stmbase;
function makeCharCats(chars) {
return foldn.curry2(
xs => join([joinMap(x => smap(c => c+x,chars), xs)
, xs]), chars);
}
module.exports = makeCharCats;
FP.js 不对流函数在一次 _done() 之后再次调用依然返回 _done() 作保证,相关问题在查