0

使用函数,我们可以从任何类型中抽象出来。下面以Option类型为例:

const Some = x => y =>
  k => k(x);

const None = y =>
  k => y;

const sqr = n => n * n;

const run = f => t => t(f);

const x = Some(5) (0),
  y = None(0);

run(sqr) (x); // 25
run(sqr) (y); // 0

现在我想对延迟类型进行编码以在 Javascript 中获得惰性效果。但我不知道正确的方法,以及这种努力是否对 Church Encoding 有意义。这是我的第一个镜头:

const Deferred = thunk =>
  k => k(thunk());

const inc = n => n + 1;

const sqr = n => n * n;

const run = f => t => t(f);

const x = Deferred(() => inc(4));

run(sqr) (x); // 25

我在这里完全处于黑暗之中。这种方法会导致任何有意义的事情吗?

4

1 回答 1

1

Church 编码(更准确地说,Scott 编码)提供了一种对具有不同情况(例如实例构造函数)的数据类型中的分支进行编码的方法。但是,您的Deferred类型是对需要延续的函数的(新类型)包装器,没有要编码的多个案例。我不认为你可以在这里应用这个概念。

于 2018-11-24T20:15:44.360 回答