我问的原因或原则.
我发现Java8中"流"接口的大多数方法都没有声明为"默认",因此它们没有方法体.例如:
boolean anyMatch(谓词谓词);
boolean allMatch(谓词谓词);
流映射(Function mapper);
正如您在源文件Stream.java中看到的那样.
但是这些没有实体的方法似乎能够在java程序中执行.
你知道为什么吗?
谢谢.
java functional-programming lambda-calculus java-8 java-stream
类别理论中的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由运营商展示结构:( flatMap或bind在Haskell中)由map和的组成flat.
但是,我总是认为在函数式编程中理解和实现Monad概念更加简单和容易,通过将结构与对象(例如flatUnit,unit和的组合)展平来构成函数flat.
在这种情况下,flatUnit(flatUnit(x)) = flatUnit(x).我实际上是用这种方式在JavaScript中实现的,并且使用flatUnit和 …
javascript monads haskell functional-programming category-theory
data BTree a = Empty | Node (BTree a) a (BTree a) -- This is a node-labelled binary tree
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下下面的Haskell函数吗?
labels :: BTree a -> [a]
labels Empty = []
labels (Node left label right) = labels left ++ [label] ++ labels right
Run Code Online (Sandbox Code Playgroud)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)如何以无点样式重写以下函数,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 ×3
binary-tree ×1
java ×1
java-8 ×1
java-stream ×1
javascript ×1
monads ×1
pointfree ×1