我想在os x(10.9.1)的进程中获取一个打开文件的列表.在Linux中我能够从中获得/proc/PID/fd
.但是我不确定如何在OS X上获得相同的结果.我发现OS X上没有procfs(默认情况下.可能的实现存在,但我不想那样).
那么我如何(在本机上)获取OS X上进程中打开文件的列表.一种方法是lsof
.有没有其他支持?请告诉我在哪里可以获得更多相关信息.
谢谢.
如何在并发Haskell程序中提供异常?
假设我们有一个进程,有多个线程,其中一个通过TCP连接与某些东西进行交互,我们得到一个信号(比如在*nix系统上).
该信号将传递给哪个(绿色)线程?
是否将它传递给"使用"套接字或"主"指定线程将接收的那个,并且它必须明确地执行a throwTo
将异常发送到该(绿色)线程?
concurrency multithreading haskell exception-handling exception
我在业余时间学习Haskell已经有几个月了.我想知道Haskell如何在当前库存硬件上执行内存子系统(L1,L2,L3缓存).有人可以指点我关于缓存友好是Haskell的任何报告/研究,因为它的懒惰评估/按需调用?有没有办法让我们获取有关发生了多少数据缓存未命中和指令缓存未命中的信息,看看这是否是由于该语言的惰性评估性质?
谢谢.
我目前正在尝试理解Okasaki给出的Red-Black树实现并删除Kahrs的方法(无类型版本).
在删除实现中使用了一个函数app
,它似乎"合并"了被删除节点的子节点.再次,算法似乎使用相同的"打破"红色 - 红色属性而不是黑色高度(请纠正我,如果我错了)..我们总是创建红色节点(即使我们打破红色 - 红色属性).沿着被删除节点的子树走下去,纠正红红色违规,一旦我们到达叶子,我们就开始上行路径(从创建的"新树"合并开始)修复路径上的红色红色违规.
app :: RB a -> RB a -> RB a
app E x = x
app x E = x
app (T R a x b) (T R c y d) =
case app b c of
T R b' z c' -> T R(T R a x b') z (T R c' y d)
bc -> T R a x (T R bc y d)
app (T B a …
Run Code Online (Sandbox Code Playgroud) '将'操作'置于Monad(Haskell)状态,更新实际状态还是仅返回具有新值的新状态?我的问题是,State Monad可以像一个"全局变量"一样在必要的环境中使用吗?'put'是否修改了"全局变量"?
我的理解是NO它不修改initialState,但是使用monadic接口我们可以传递新的状态b/w计算,使初始状态"完整".它是否正确?如果没有,请纠正我.
谢谢.
我正在探索c ++ 17的新增内容.经过玩弄 std::variant
,想用std::optional
也用同样的例子.目前看到编译因以下错误而失败:
error: no viable conversion from returned value of type
'(lambda at ./html_parser.hpp:53:9)' to function return type 'Parser<char>' (aka
'std::__1::function<std::__1::optional<std::__1::pair<char, std::__1::basic_string<char> > >
(std::__1::basic_string<char>)>')
return [=](std::string& input) -> ParserResult<char> {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/acid/tools/include/c++/v1/functional:1627:5: note: candidate constructor not viable: no known conversion
from '(lambda at ./html_parser.hpp:53:9)' to 'std::nullptr_t' (aka 'nullptr_t') for 1st argument
function(nullptr_t) _NOEXCEPT : __f_(0) {}
^
/home/acid/tools/include/c++/v1/functional:1628:5: note: candidate constructor not viable: no known conversion
from '(lambda at ./html_parser.hpp:53:9)' to 'const
std::__1::function<std::__1::optional<std::__1::pair<char, …
Run Code Online (Sandbox Code Playgroud) 我试图了解RankNTypes。
为什么编译器在这种情况下可以抱怨a
不能是[a]
?
> :{
> | tupleF2 :: (forall a . a -> b) -> (a1, a2) -> (b, b)
> | tupleF2 elemF2 (x, y) = (elemF2 x, elemF2 y)
> | :}
> :t tupleF2 tupleF2 :: (forall a. a -> b) -> (a1, a2) -> (b, b)
> :t tupleF2 length
<interactive>:1:9: error:
• Couldn't match type ‘a’ with ‘[a0]’
‘a’ is a rigid type variable bound by
a type expected by the …
Run Code Online (Sandbox Code Playgroud) 我试图理解为什么第一个main
在无效时终止c
,而第二个终止.从描述来看,这
main
只是一个未经评估的thunk,executing
它只是构建数据结构.我试图在这里应用相同的原理,看看为什么第一个主要没有终止.如果有人可以帮助我理解这一部分,或者给我指点理解这将是伟大的.除此之外,为什么GHCI无法将其识别为TCO?不符合定义吗?
main = loop
where
loop = do
c <- getChar
case valid c of
Nothing -> return ()
Just b -> print b
print c
loop
> main :: IO ()
> main = loop
> where
> loop = do
> c <- getChar
> case validate c of
> Nothing -> return ()
> Just b -> do
> print b
> loop
Run Code Online (Sandbox Code Playgroud)
谢谢.
我在业余时间通过LYAH学习Haskell .想通过解决命令式世界中的一些问题来改进我的Haskell(/ Functional编程)技能.EPI的一个问题是以排序的方式打印" 几乎排序的数组 ",其中保证数组中的元素不超过k
其正确位置.输入是元素流,并且要求在O(n log k)
时间复杂度和O(k)
空间复杂性方面做到这一点.
我试图在Haskell中重新实现命令式解决方案,如下所示:
import qualified Data.Heap as Heap
-- print the k-sorted list in a sorted fashion
ksorted :: (Ord a, Show a) => [a] -> Int -> IO ()
ksorted [] _ = return ()
ksorted xs k = do
heap <- ksorted' xs Heap.empty
mapM_ print $ (Heap.toAscList heap) -- print the remaining elements in the heap.
where
ksorted' :: (Ord a, Show …
Run Code Online (Sandbox Code Playgroud) haskell ×7
algorithm ×1
c++ ×1
c++17 ×1
caching ×1
call-by-need ×1
clang++ ×1
concurrency ×1
exception ×1
lambda ×1
macos ×1
procfs ×1
rank-n-types ×1
sorting ×1
state-monad ×1
std-function ×1
typechecking ×1