Extracting data from a function chain without arrays

后端 未结 5 953
臣服心动
臣服心动 2021-01-14 01:36

This is an advanced topic of

How to store data of a functional chain of Monoidal List?

I am pretty sure we can somehow extract data from a function chain wit

5条回答
  •  旧时难觅i
    2021-01-14 01:57

    I'll have to admit I haven't read through your linked questions and I'm mainly here for the fun puzzle... but does this help in any way?

    I figured you want to differentiate between adding an element (calling with a new value) and running a function on the list (calling with a function). Since I had to somehow pass the function to run, I couldn't get the (1) vs () syntax to work.

    This uses an interface that returns an object with concat to extend the list, and fold to run a reducer on the list. Again, not sure if it's a complete answer, but it might help you explore other directions.

    const Empty = Symbol();
    
    const L = (x, y = Empty) => ({
      concat: z => L(z, L(x, y)),
      fold: (f, seed) => f(x, y === Empty ? seed : y.fold(f, seed))
    });
    
    const sum = (a, b) => a + b;
    
    
    console.log(
      L(1)
        .concat(2).concat(3).concat(4).concat(5).concat(6)
        .fold(sum, 0)
    )

提交回复
热议问题