b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java输入字符串 函数式编程简介(6)

电脑杂谈  发布时间:2018-02-18 05:53:06  来源:网络整理

之所以会出现上述的结果,是因为 interleave xforms 将 (map inc) 以及 (filter odd?) 和logs进行了交叉,得到的结果是 (comp (map inc) (log) (filter odd?) (log)) ,所以如果是偶数就会被filter清除,看不见log了。

首先一定得理解:每个tranducer函数都是同构的!

java如何输入一个字符_java输入字符串_java输入字符串的if

形式如下

(defn m [f]
    (fn [rf] 
        (fn [result elem]
            (rf result (f elem)))))

这意味着 (m f) 的函数都是可以组合的,组合的形式如下:

(comp (m f) (m1 f1) ...)

展开之后

((m f) 
    ((m1 f1) 
        ((m2 f2) ...)))
->
(fn [result elem]
    (((m1 f1) 
        ((m2 f2) ...)) result (f elem)))

所以可以看到第一个执行的一定是 comp 的首个 reducing function 参数。故:

xform 作为组合的前提

执行顺序从左到右;

+ 作为 reducing function 最后执行;

什么是 Monad 呢?A monad is just a monoid in the category of endofunctors.

Identity—For a monad m, m flatMap unit => m

Unit—For a monad m, unit(v) flatMap f => f(v)

Associativity—For a monad m, m flatMap g flatMap h => m flatMap {x => g(x) flatMap h}

// java8 实现的 9*9 乘法表
public class ListMonad<T>{
    private List<T> elements;

    private ListMonad(T elem) {
        this.elements = singletonList(elem);
    }

    private ListMonad(List<T> elems) {
        this.elements = elems;
    }

    public <U> ListMonad<U> flatmap(Function<T, ListMonad<U>> fn) {
        List<U> newElements = new ArrayList<>();
        this.elements.forEach(elem -> newElements.addAll(fn.apply(elem).elements));
        return new ListMonad<>(newElements);
    }

    public <X> ListMonad<X> uint(X elem) {
        return new ListMonad<>(elem);
    }

    public <U> ListMonad<U> apply(ListMonad<Function<T, U>> m) {
        return m.flatmap(this::map);
    }

    public <U> ListMonad<U> map(Function<T, U> fn) {
        return flatmap(t -> uint(fn.apply(t)));
    }

    public static void main(String[] args) {
        ListMonad<Integer> m = new ListMonad<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
        ListMonad<Integer> m1 = new ListMonad<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));

        ListMonad<Integer> list = m.apply(m1.map(x -> y -> x * y));
        // [1...81]
    }
}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-83096-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 刘亚超
      刘亚超

      人家做生意上来先给你个大金戒指

    • 王春华
      王春华

      这人出道几年了

    • 社倖一
      社倖一

      我们就不仅仅是丧失机遇的问题了

    每日福利
    热点图片
    拼命载入中...