标签: combinators

haskell中的并行映射

是否有一些替代品map并行评估列表?我不需要它懒惰.

类似的东西:pmap :: (a -> b) -> [a] -> [b]让我pmap expensive_function big_list拥有100%的核心.

parallel-processing haskell multicore combinators

33
推荐指数
2
解决办法
1万
查看次数

像tap一样的组合方法,但能够返回不同的值吗?

我正在经历一个试图避免临时变量和过度使用条件的阶段,我可以使用更流畅的编码风格.我非常喜欢#tap在我想要获得我需要返回的值的地方使用,但在我返回它之前先做一些事情.

def fluid_method
  something_complicated(a, b, c).tap do |obj|
    obj.update(:x => y)
  end
end
Run Code Online (Sandbox Code Playgroud)

比.程序:

def non_fluid_method
  obj = something_complicated(a, b, c)
  obj.update(:x => y)
  obj # <= I don't like this, if it's avoidable
end
Run Code Online (Sandbox Code Playgroud)

显然上面的例子很简单,但这仍然是ruby社区中非常常见的编码风格.我有时会使用#inject一系列过滤器传递一个对象:

things.inject(whatever) do |obj, thing|
  thing.filter(obj)
end
Run Code Online (Sandbox Code Playgroud)

比.程序:

obj = whatever
things.each do |thing|
  obj = thing.filter(obj)
end
obj
Run Code Online (Sandbox Code Playgroud)

现在我正面临着如下条件的重复使用,并寻找一种更流畅的方法来处理它:

def not_nice_method
  obj = something_complex(a, b, c)
  if a_predicate_check?
    obj.one_more_method_call
  else
    obj
  end
end
Run Code Online (Sandbox Code Playgroud)

(稍微)更清洁的解决方案是以复制为代价避免临时变量:

def not_nice_method
  if a_predicate_check?
    something_complex(a, b, …
Run Code Online (Sandbox Code Playgroud)

ruby theory combinators

29
推荐指数
3
解决办法
3833
查看次数

什么是zygo/meta/histo/para/futu/dyna/whatever-morphisms?

是否有一个列表,其中包含没有广泛的类别理论知识的人可以访问的示例?

haskell functional-programming combinators category-theory

27
推荐指数
4
解决办法
1400
查看次数

什么是超级组合器和不断的应用形式?

我正在为Super Combinators所做的努力:

超级组合器是常量或组合器,其仅包含超级组合器作为子表达式.

还有Constant Applicative Forms是什么:

任何不是lambda抽象的超级组合子.这包括真正的常量表达式,如12,((+)1 2),[1,2,3]以及部分应用的函数,如((+)4).请注意,最后一个示例在eta抽象下等效于\ x - >(+)4 x,它不是CAF.

这对我没有任何意义!是不是((+) 4)像12一样"真正不变"?CAF听起来像是我简单心灵的价值观.

haskell functional-programming combinators

22
推荐指数
1
解决办法
1320
查看次数

使用foldr实现zip

我目前正在使用Real World Haskell的第4章,我正试图围绕foldr实现foldl.

(这是他们的代码:)

myFoldl :: (a -> b -> a) -> a -> [b] -> a

myFoldl f z xs = foldr step id xs z
    where step x g a = g (f a x)
Run Code Online (Sandbox Code Playgroud)

我以为我会尝试zip使用相同的技术实现,但我似乎没有取得任何进展.它甚至可能吗?

haskell functional-programming combinators fold

20
推荐指数
5
解决办法
4250
查看次数

Haskell地图/邮编Vs. 列表理解

您最有可能写下以下哪项?

r = zip xs $ map sqrt xs
Run Code Online (Sandbox Code Playgroud)

要么

r = [(x, sqrt x) | x <- xs]
Run Code Online (Sandbox Code Playgroud)

互联网上的示例代码似乎表明前者更为丰富且是首选方式.

zip haskell list-comprehension combinators pointfree

19
推荐指数
7
解决办法
6584
查看次数

Haskell中的短路(&&)

一个一直困扰我的快速问题.Haskell是否在返回布尔值的函数中执行所有等价测试,即使返回false值也是如此?

例如

f a b = ((a+b) == 2) && ((a*b) == 2)
Run Code Online (Sandbox Code Playgroud)

如果第一个测试返回false,它会在第二个测试之后执行&&吗?或者哈斯克尔是否懒得不去做并继续前进?

haskell boolean combinators

18
推荐指数
2
解决办法
3194
查看次数

有"类型级组合器"吗?他们将来会存在吗?

许多事情让哈斯克尔非常好的在我看来,使用的组合程序,如(.),flip,$ <*>等这感觉就像当我需要我可以创建新的语法.

前段时间我正在做一些事情,如果我能"翻转"一个类型的构造函数,那将是非常方便的.假设我有一些类型构造函数:

m  :: * -> * -> * 
Run Code Online (Sandbox Code Playgroud)

并且我有一个类MyClass需要带有类型构造函数的类型* -> *.当然,我会选择以这样的方式对类型进行编码:

instance MyClass (m a) 
Run Code Online (Sandbox Code Playgroud)

但是假设我无法改变那些代码,并假设真正适合的代码MyClass就是这样

type w b = m b a 

instance MyClass w where 
    ...
Run Code Online (Sandbox Code Playgroud)

然后我必须激活XTypeSynonymInstances.有没有办法创建一个"类型级组合器" Flip,我可以这样做:

instance MyClass (Flip m a)  where 
   ...
Run Code Online (Sandbox Code Playgroud)

?? 或者我们在haskell中使用的常见运算符的其他类型级概括?这甚至是有用的还是我只是漫无目的?

编辑:

我可以这样做:

newtype Flip m a b = Flip (m b a)

newtype Dot m w a  = Dot m (w a)

...
Run Code Online (Sandbox Code Playgroud)

但后来我不得不使用这些数据构造 …

haskell types combinators type-level-computation

17
推荐指数
1
解决办法
748
查看次数

16
推荐指数
4
解决办法
7227
查看次数

Haskell中的S组合子

S组合器的模拟是否可以仅使用标准函数(不通过公式定义)并且不使用lambda(匿名函数)在Haskell中表示?我期待它的类型(a -> b -> c) -> (a -> b) -> a -> c.

例如,K组合器的模拟就是const.

实际上我试图\f x -> f x x用标准函数来表达函数,但是不能想到任何标准的非线性函数(这是一个多次使用它的参数的函数).

haskell combinators s-combinator

16
推荐指数
2
解决办法
2286
查看次数