实际使用K组合器(Kestrel)在javascript中

前端之家收集整理的这篇文章主要介绍了实际使用K组合器(Kestrel)在javascript中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
K组合器可以实现如下,实现不应有任何副作用.
const K = x => y => x;

它有时被称为“const”(如在Haskell中). K函数可以被定义为:“取一个值并返回总是返回该值的(常数)一元函数.

什么时候有用?请帮助我实际的例子.

解决方法

排序一个广泛的问题,但它很好,我喜欢它.

为了支持我的例子,在这个答案我将要实施…

abuild :: Number -> (Number -> a) -> [a]

…根据类型建议,需要一个数字和一个函数来构建一个数组.如果您希望基于某些计算来构建已知大小的数组,这可能很有用.

我们来构建一个包含5个元素的数组,使用identity function id.如您所见,您的构建器功能将给出以0开头的连续数字索引

abuild(5)(id)
// => [0,1,2,3,4]

我们这次和建筑师做一些情感.我们将平方的输入.非常先进

abuild (5) (x=> x * x)
// => [0,4,9,16]

或者也许我们不关心输入.我总是喜欢笑我不断地笑起来可以说我K(‘哈’)…

abuild (5) (K('ha'))
// => ['ha','ha','ha']

激动!很有用,对吧?那是K

履行

继续运行,看看K在行动!

// id :: a -> a
const id = x=> x

// K :: a -> b -> a
const K = x=> y=> x

// add :: Number -> Number -> Number
const add = x=> y=> y + x

// reduce :: (a -> b) -> b -> [a] -> b 
const reduce = f=> y=> ([x,...xs])=> {
  if (x === undefined)
    return y
  else
    return reduce (f) (f (y) (x)) (xs)
}

// map :: (a -> b) -> [a] -> [b]
const map = f=> reduce (xs=> x=> [...xs,f(x)]) ([])

// iterate :: Number -> (a -> a) -> a -> [a]
const iterate = n=> f=> x=>
  n > 0 ? [x,...iterate (n - 1) (f) (f(x))] : []

// abuild :: Number -> (Number -> a) -> [a]
const abuild = n=> f=>
  map (f) (iterate (n) (add (1)) (0))

console.log(abuild (5) (id))
// => [0,4]

console.log(abuild (5) (x=> x * x))
// => [0,16]

console.log(abuild (5) (K('ha')))
// => ['ha','ha']

猜你在找的JavaScript相关文章