小编Ant*_*ton的帖子

使用递归列表zipWith进行空间泄漏

我的空间泄漏发生在我的一个个人项目中.但我不希望有人在我的项目中解决它.我想了解它.

我通过编写这个算法来重现我的空间泄漏:

u是由以下定义的序列:

  • u(0)= 1
  • 你(1)= 2
  • 你(2)= 1
  • 你(4)= 3
  • ...
  • 你(19)= 11

在此之后,定义u:u(n)= u(n-5)+ u(n-10) - u(n-15)

在haskell中易于实现吗?

import System.Environment (getArgs)

u = [1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11]
        ++ zipWith3 go u' u'' u'''
    where u' = drop 15 u
          u'' = drop 10 u
          u''' = drop 5 u
          go a b c = a + b - c

main = do …
Run Code Online (Sandbox Code Playgroud)

haskell memory-leaks sequence fibonacci space-leak

9
推荐指数
1
解决办法
206
查看次数

不同 ocaml 模块中的相同类型不匹配

我很抱歉这看起来像一个“琐事”问题,但这是我能想到的最简单的例子:

module type Foo = sig
  type 'a t

  val foo : 'a -> 'a t
end

module Foo : Foo = struct
  type 'a t = T of 'a

  let foo x = T x
end

(* Rewrap foo, add one function *)
module type Bar = sig
  include Foo

  val bar : int -> int t
end

module Bar : Bar = struct
  include Foo

  let bar n = foo (n + 1)
end

(* Specialization of Baz …
Run Code Online (Sandbox Code Playgroud)

ocaml types module

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

将一个IO递归循环重构为Haskell中的monad折叠

我写了一个tcp服务器,这是我的主循环方法:

serverLoop :: Socket -> IO ()
serverLoop sock = do
    (conn, _) <- accept sock
    forkIO $ handleConn conn
    serverLoop sock
Run Code Online (Sandbox Code Playgroud)

(注意:handleConn :: Socket -> IO ()是我的程序特有的功能.)

我想将它重构成更加一元的方式,这是我的试探性的:

serverLoop :: Socket -> IO ()
serverLoop sock = foldl1 (>>) $ map go $ repeat sock
     where go sock = (accept sock) >>= (forkIO . handleConn . fst) >> return ()
Run Code Online (Sandbox Code Playgroud)

但是,一旦我开始通过套接字发送数据,这会使程序崩溃.

以下是我的问题:为什么?有什么办法解决的?

sockets haskell network-programming io-monad

0
推荐指数
1
解决办法
159
查看次数