小编ham*_*mar的帖子

在做GHC解释器的某些情况下只有空间泄漏:concat <some list> !! ñ

我定义我自己的版本concat,myConcat:

module Eh where

myConcat []          = []
myConcat ([]:os)     = myConcat os
myConcat ((x:xs):os) = x : myConcat (xs:os)

(!!!)  :: [a] -> Int -> a
xs     !!! n | n < 0 = error "negative index"
[]     !!! _         = error "index too large"
(x:_)  !!! 0         = x
(_:xs) !!! n         = xs !!! (n-1)
Run Code Online (Sandbox Code Playgroud)

如果我myConcat <some huge list> !! n使用GHC解释器,它会以300MB/s的速度窃取我的内存,而且我必须在它召唤OOM杀手之前杀死它.请注意,我加载Eh为"解释",我在加载之前不编译它.

code run in the GHC interpreter        space leak? …

haskell ghc

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

编辑元素时重新排序Java优先级队列

我正在尝试使用优先级队列来实现Dijkstra的算法来寻找最短路径.在算法的每个步骤中,我删除距离优先级队列最短距离的顶点,然后更新优先级队列中每个邻居的距离.现在我读到Java中的优先级队列在编辑其中的元素(确定排序的元素)时不会重新排序,所以我试图通过插入和删除虚拟顶点来强制它重新排序.但这似乎并没有起作用,而且我一直试图解决这个问题.

这是顶点对象和比较器的代码

class vertex {
    int v, d;
    public vertex(int num, int dis) {
        v=num;
        d=dis;
    }
}

class VertexComparator implements Comparator {
    public int compare (Object a, Object b) {
        vertex v1 = (vertex)a;
        vertex v2 = (vertex)b;
        return v1.d-v2.d;
    }
 }
Run Code Online (Sandbox Code Playgroud)

这是我运行算法的地方:

    int[] distances=new int[p];
    Comparator<vertex> comparator = new VertexComparator();
    PriorityQueue<vertex> queue = new PriorityQueue<vertex>(p, comparator);
    for(int i=0; i<p; i++) {
        if(i!=v) {
            distances[i]=MAX;
        }
        else {
            distances[i]=0;
        }
        queue.add(new vertex(i, distances[i]));
    }
    // run dijkstra
    for(int i=0; …
Run Code Online (Sandbox Code Playgroud)

java priority-queue

24
推荐指数
3
解决办法
2万
查看次数

hsc2hs和c2hs之间的区别?

hsc2hs和c2hs有什么区别?

我知道hsc2hs是一个预处理器,但它到底是做什么的?

c2hs可以用C代码制作Haskell模块,但是我需要hsc2hs吗?

haskell ffi hsc2hs c2hs

23
推荐指数
2
解决办法
3137
查看次数

Visual Studio禁用拼写检查

如何在Visual Studio 2010中禁用拼写检查?通过拼写检查我的意思是在评论,字符串等,而不是在实际的代码中

visual-assist visual-studio-2010

23
推荐指数
3
解决办法
2万
查看次数

在Haskell中旋转列表

我有一个列表a,

let a = ["#","@","#","#"]
Run Code Online (Sandbox Code Playgroud)

如何旋转这@两个空格,以便它最终像这样?

["#","#","#","@"]
Run Code Online (Sandbox Code Playgroud)

我认为这可行,

map last init a
Run Code Online (Sandbox Code Playgroud)

但也许语法必须不同,因为map只能用于一个函数?

haskell

23
推荐指数
5
解决办法
8684
查看次数

使用[LT .. GT]时为什么Haskell范围需要空格?

为什么当我在Haskell中使用范围时,这有效:

[LT .. GT]
Run Code Online (Sandbox Code Playgroud)

但这不是:

[LT..GT]
Run Code Online (Sandbox Code Playgroud)

这个神秘的错误意味着什么:

<interactive>:1:2:
    Failed to load interface for `LT':
      Use -v to see a list of the files searched for.

<interactive>:1:2:
    A section must be enclosed in parentheses thus: (`LT..` GT)
Run Code Online (Sandbox Code Playgroud)

但是,当我使用Ints时,第二种形式(没有空格)有效:

[1..3]
Run Code Online (Sandbox Code Playgroud)

haskell

20
推荐指数
2
解决办法
1084
查看次数

找不到模块,它是隐藏包haskell98的成员

当我尝试用import IO或编译一个简单的源文件时import Random,构建失败并显示如下错误消息:

Could not find module 'IO'
It is a member of the hidden package 'haskell98-2.0.0.1'
Use -v to see a list of the files searched for
Run Code Online (Sandbox Code Playgroud)

import hidden haskell

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

如何在Haskell中查找字符串中字符的频率?

如何计算字符串中字符的频率,然后以表格的形式输出它们?

例如,如果我输入单词"happy",结果将是

h 1  
a 1  
p 2  
y 1  
Run Code Online (Sandbox Code Playgroud)

如果这也可以按ASCII顺序排序,那就太棒了.

我知道我需要使用计数功能,任何其他提示将不胜感激.

编辑:所有的答案都很棒,只有我在Haskell的初学者,我实际上并不了解他们在做什么.

haskell

19
推荐指数
3
解决办法
1万
查看次数

如何在WAI服务器中实现shutdown命令?

我想为我的webapp实现'graceful shutdown'命令(而不是我的第一直觉,就是要求人们杀死进程)

我的前两次尝试包括

  1. liftIO exitSuccess
  2. E.yield (responseLBS statusOK [G.contentType "text/plain"] "") E.EOF

两者都只是愉快地将结果返回给客户端并继续收听.应用程序可以做什么来杀死服务器?这甚至是一件合理的事情吗?

我承认我对iteratee没有很强的理解,只知道我可以消耗我的输入并且Iteratee是一个MonadIO实例.

haskell yesod

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

为什么Safe Haskell不支持Template Haskell?

Safe Haskell的文档说明:

[...]不幸的是,模板Haskell可用于破坏模块边界,因此可用于获取对此构造函数的访问权限.[...]使用-XSafe标志编译Danger模块会限制可用于安全子集的Haskell功能.这包括禁止不安全的PerfromIO,模板Haskell,[...]

用作将AST转换为另一个AST的宏系统,是否不能简单地将TH限制为Haskell的安全子集,并将结果AST限制为该子集?

haskell template-haskell

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