标签: functional-programming

java8中的"Stream"如何工作?

我问的原因或原则.

我发现Java8中"流"接口的大多数方法都没有声明为"默认",因此它们没有方法体.例如:

boolean anyMatch(谓词谓词);

boolean allMatch(谓词谓词);

流映射(Function mapper);

正如您在源文件Stream.java中看到的那样.

但是这些没有实体的方法似乎能够在java程序中执行.

你知道为什么吗?

谢谢.

java functional-programming lambda-calculus java-8 java-stream

-9
推荐指数
1
解决办法
133
查看次数

Monads不是"flatMap"而是"flatUnit"?

类别理论中的Monads由三元组T,单位,平坦 defined定义.

class Monad t where
  map :: (a -> b) -> (t a -> t b) -- functorial action
  unit :: a -> t a
  flat :: t (t a) -> t a

class KleisliTriple t where
  unit :: a -> t a
  flatMap :: t a -> (a -> t b) -> t b
Run Code Online (Sandbox Code Playgroud)

KleisliTriple由运营商展示结构:( flatMapbind在Haskell中)由map和的组成flat.

但是,我总是认为在函数式编程中理解和实现Monad概念更加简单和容易,通过将结构与对象(例如flatUnit,unit和的组合)展平来构成函数flat.

在这种情况下,flatUnit(flatUnit(x)) = flatUnit(x).我实际上是用这种方式在JavaScript中实现的,并且使用flatUnit和 …

javascript monads haskell functional-programming category-theory

-9
推荐指数
1
解决办法
412
查看次数

Haskell函数寻求解释

data BTree a = Empty | Node (BTree a) a (BTree a) -- This is a node-labelled binary tree
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下下面的Haskell函数吗?

  1. labels :: BTree a -> [a]

    labels Empty = []
    labels (Node left label right) = labels left ++ [label] ++ labels right
    
    Run Code Online (Sandbox Code Playgroud)
  2. reflect :: BTree a -> BTree a

    reflect Empty = Empty
    reflect (Node left label right) = Node (reflect left) label (reflect right)
    
    Run Code Online (Sandbox Code Playgroud)

binary-tree haskell functional-programming

-11
推荐指数
1
解决办法
367
查看次数

如何用无点样式编写这个函数?

如何以无点样式重写以下函数,x完全从定义中删除参数(另外两个可能保留):

between min max x = (min < x) && (x < max)
Run Code Online (Sandbox Code Playgroud)

这不是一项任务,只是一个问题.我不知道该怎么办.我可以把它变成一个lambda函数

between min max = \x -> (min < x) && (x < max)
Run Code Online (Sandbox Code Playgroud)

但这不是没有点的,因为x它仍然存在.请帮忙.

haskell functional-programming pointfree tacit-programming

-12
推荐指数
2
解决办法
334
查看次数