我想知道是否可以在C++ 11中编写一个返回lambda函数的函数.当然一个问题是如何声明这样的功能.每个lambda都有一个类型,但是这种类型在C++中是不可表达的.我不认为这会奏效:
auto retFun() -> decltype ([](int x) -> int)
{
return [](int x) { return x; }
}
Run Code Online (Sandbox Code Playgroud)
这不是:
int(int) retFun();
Run Code Online (Sandbox Code Playgroud)
我不知道从lambdas到函数指针或类似函数的任何自动转换.手工制作函数对象并返回它的唯一解决方案是什么?
我一直在读类别理论中的单子.monads的一个定义使用一对伴随函子.monad是使用这些仿函数的往返定义的.显然,在类别理论中,附加是非常重要的,但我没有看到关于伴随函子的Haskell monad的任何解释.有没有人给它一个想法?
新的C++ 11标准有一整章专门用于随机数生成器.但是,我如何执行过去像这样编码的最简单,最常见的任务,但不使用标准C库:
srand((unsigned int)time(0)); int i = rand();
是否可以使用开箱即用的随机数引擎,分布和种子的合理默认值?
我正在使用GHCi 7.0.3以及实现类型级列表的以下程序:
{-# LANGUAGE TypeOperators #-}
data True
data False
-- List
data Nil
data Cons x xs
-- Type-level infix operator must begin with ':'
data x ::: xs
infixr 5 ::: -- set precedence level to 5 (tight)
Run Code Online (Sandbox Code Playgroud)
它编译,但当我测试它:
:t (undefined :: True:::Nil)
Run Code Online (Sandbox Code Playgroud)
(什么是转换为类型undefined时的类型True:::Nil?)我收到此错误:
Illegal operator `:::' in type `True ::: Nil'
Use -XTypeOperators to allow operators in types
Run Code Online (Sandbox Code Playgroud)
事实上,当我用旗帜开始GHCi时
-XTypeOperators
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果:
(undefined :: True ::: Nil) :: True ::: Nil
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么等效的pragma不起作用:
{-# LANGUAGE …Run Code Online (Sandbox Code Playgroud) Haskell/Java互操作的当前解决方案是什么?我在Meijer和Finne看过关于Lambada的论文.有一个名为GCJNI的项目,但它似乎已经不存在了 - 它的链接被打破了.有没有可以开箱即用的东西?
我在F#中编写了一个程序,它异步列出磁盘上的所有目录.异步任务列出给定目录中的所有文件,并创建单独的异步任务(守护程序:我使用Async.Start启动它们)以列出子目录.它们都将结果传递给中央邮箱处理器.
我的问题是,如何检测所有守护程序任务已完成,并且将不再有文件到达.基本上我需要一个障碍来完成我的顶级任务(直接和间接)孩子的所有任务.我在F#的异步模型中找不到类似的东西.
我所做的是创建一个单独的MailboxProcessor,我在其中注册每个任务的开始和终止.当活动计数变为零时,我就完成了.但我对这个解决方案不满意.还有其他建议吗?
我写了一个快速而脏的函数来比较文件内容(BTW,我已经测试过它们的大小相同):
let eqFiles f1 f2 =
let bytes1 = Seq.ofArray (File.ReadAllBytes f1)
let bytes2 = Seq.ofArray (File.ReadAllBytes f2)
let res = Seq.compareWith (fun x y -> (int x) - (int y)) bytes1 bytes2
res = 0
Run Code Online (Sandbox Code Playgroud)
我不满意将所有内容读入数组.我宁愿有一个懒惰的字节序列,但我在F#中找不到合适的API.