小编Sco*_*uff的帖子

无点形式与风格

你能转换吗?

-- tupleUnfold :: forall a. ((forall b. a -> b)) -> a -> ((b))
tupleUnfold :: Int -> ExpQ
tupleUnfold n = do
  xs <- forM [1 .. n] (const . newName $ "x")
  y <- newName "y"
  let y' = varE y
      g (ps', es') x = (varP x : ps', appE (varE x) y' : es')
      (ps, es) = foldl' g ([], []) xs
  lamE [tupP ps, varP y] (tupE es)
Run Code Online (Sandbox Code Playgroud)

在保持清晰度的同时采用无点风格(我知道程序'pointfree',但更愿意不再混淆代码)?

无论哪种方式,可以做出哪些改变来改进功能的风格,或者使其意图更清晰?该功能旨在如下使用.

$(tupleUnfold 3) ((+ 1), …
Run Code Online (Sandbox Code Playgroud)

haskell coding-style pointfree

6
推荐指数
1
解决办法
543
查看次数

STL算法全部还是任何功能?

是否有任何接近Haskell的全部或任何功能作为STL的一部分?如果没有,下面是一个很好的实现(我注意到如果迭代器是随机访问,sgi STL执行部分特化,虽然我没有打扰这个)?

template <typename InputIterator, typename Predicate>
inline bool all(InputIterator first, InputIterator last, Predicate pred) {
  while (first != last) {
    if (!pred(*first)) {
      return false;
    }
    ++first;
  }
  return true;
}
Run Code Online (Sandbox Code Playgroud)

类似地,如何最好地转换为迭代两个序列,并在BinaryPredicate为所有人返回true时返回true,否则返回false?我知道这是相对微不足道的,但似乎这应该由算法提供,我想确保我不会忽略某些东西.

c++ stl

4
推荐指数
2
解决办法
1738
查看次数

标签 统计

c++ ×1

coding-style ×1

haskell ×1

pointfree ×1

stl ×1