我定义我自己的版本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? …
我正在尝试使用优先级队列来实现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) hsc2hs和c2hs有什么区别?
我知道hsc2hs是一个预处理器,但它到底是做什么的?
c2hs可以用C代码制作Haskell模块,但是我需要hsc2hs吗?
如何在Visual Studio 2010中禁用拼写检查?通过拼写检查我的意思是在评论,字符串等,而不是在实际的代码中
我有一个列表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中使用范围时,这有效:
[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) 当我尝试用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) 如何计算字符串中字符的频率,然后以表格的形式输出它们?
例如,如果我输入单词"happy",结果将是
h 1
a 1
p 2
y 1
Run Code Online (Sandbox Code Playgroud)
如果这也可以按ASCII顺序排序,那就太棒了.
我知道我需要使用计数功能,任何其他提示将不胜感激.
编辑:所有的答案都很棒,只有我在Haskell的初学者,我实际上并不了解他们在做什么.
我想为我的webapp实现'graceful shutdown'命令(而不是我的第一直觉,就是要求人们杀死进程)
我的前两次尝试包括
liftIO exitSuccessE.yield (responseLBS statusOK [G.contentType "text/plain"] "") E.EOF两者都只是愉快地将结果返回给客户端并继续收听.应用程序可以做什么来杀死服务器?这甚至是一件合理的事情吗?
我承认我对iteratee没有很强的理解,只知道我可以消耗我的输入并且Iteratee是一个MonadIO实例.
Safe Haskell的文档说明:
[...]不幸的是,模板Haskell可用于破坏模块边界,因此可用于获取对此构造函数的访问权限.[...]使用-XSafe标志编译Danger模块会限制可用于安全子集的Haskell功能.这包括禁止不安全的PerfromIO,模板Haskell,[...]
用作将AST转换为另一个AST的宏系统,是否不能简单地将TH限制为Haskell的安全子集,并将结果AST限制为该子集?