问题标签 [haskell]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - 有调试生产功能程序的实际经验吗?
我对用于诊断大型功能程序中的缺陷的工具和方法感兴趣。什么工具有用?我目前的理解是“printf”调试(例如添加日志记录和重新部署)是通常使用的。
如果你已经调试了一个功能系统,那么调试一个用 OO 或过程语言构建的系统有什么不同呢?
haskell - Haskell 用于服务器?
关于制作游戏服务器,Erlang 似乎总是作为一种“为这种事情而构建”的语言出现,它具有可扩展性和并发特性。我在 Haskell 和 Erlang 方面都没有经验,但从表面上看,它们似乎是一样的。查看 Haskell 的文档,它似乎支持多处理器可扩展性和并发性,据说 Haskell 是一种更可靠的语言,并且拥有明显更好的社区。那么,我的问题是,Haskell 是否被认为与 Erlang 所认为的服务器构建解决方案一样好?
haskell - 在 Haskell 中保存图表
我可以轻松地为有向图的节点定义数据类型。
我可以使用 show 函数将图形保存到文件中,然后使用 read 恢复它。但是,show 无法应对循环。有没有一种简单的方法来保存和恢复图表?
visual-studio - 视觉哈斯克尔 2008
Haskell for Visual Studio 2005是否与 VS2008 SP1 兼容?
algorithm - 表示连续概率分布
我有一个涉及连续概率分布函数集合的问题,其中大部分是根据经验确定的(例如出发时间、运输时间)。我需要的是获取其中两个 PDF 并对它们进行算术运算的某种方法。例如,如果我有两个取自 PDF X 的值 x 和取自 PDF Y 的 y,我需要获取 (x+y) 或任何其他操作 f(x,y) 的 PDF。
分析解决方案是不可能的,所以我正在寻找的是允许这些事情的 PDF 的一些表示。一个明显(但计算成本高)的解决方案是蒙特卡罗:生成大量 x 和 y 值,然后仅测量 f(x, y)。但这需要太多的 CPU 时间。
我确实考虑将 PDF 表示为范围列表,其中每个范围具有大致相等的概率,有效地将 PDF 表示为均匀分布列表的并集。但我看不出如何将它们结合起来。
有人对这个问题有什么好的解决方案吗?
编辑:目标是创建一种用于操作 PDF 的迷你语言(又名域特定语言)。但首先我需要理清底层的表示和算法。
编辑 2: dmckee 建议使用直方图实现。这就是我对统一分布列表的理解。但我不知道如何将它们结合起来创建新的发行版。最终我需要找到像 P(x < y) 这样的东西,以防它可能非常小。
编辑 3:我有一堆直方图。它们不是均匀分布的,因为我是从发生数据生成它们的,所以基本上如果我有 100 个样本并且我想要直方图中的 10 个点,那么我为每个条分配 10 个样本,并使条的宽度可变但面积不变。
我已经发现要添加 PDF,您需要对它们进行卷积,并且我已经为此做好了数学准备。当你对两个均匀分布进行卷积时,你会得到一个包含三个部分的新分布:较宽的均匀分布仍然存在,但每边都有一个三角形,其宽度与较窄的分布相同。因此,如果我对 X 和 Y 的每个元素进行卷积,我会得到一堆这些,全部重叠。现在我试图弄清楚如何将它们全部相加,然后得到一个最接近它的直方图。
我开始怀疑蒙特卡洛到底是不是一个坏主意。
编辑 4: 本文详细讨论了均匀分布的卷积。一般来说,你会得到一个“梯形”分布。由于直方图中的每个“列”都是均匀分布,我希望可以通过对这些列进行卷积并对结果求和来解决问题。
然而,结果比输入复杂得多,并且还包括三角形。 编辑 5: [删除了错误的内容]。但是,如果这些梯形近似为具有相同面积的矩形,那么您会得到正确的答案,并且减少结果中的矩形数量看起来也很简单。这可能是我一直在寻找的解决方案。
编辑6:解决!这是这个问题的最终 Haskell 代码:
其他运算符留给读者练习。
haskell - 我什么时候应该使用 $ (它总是可以用括号代替)?
从我正在阅读的内容来看,$
它被描述为“将函数应用于其参数”。然而,它似乎不像(apply ...)
在 Lisp 中那样工作,因为它是一个二元运算符,所以它看起来唯一的作用是有时有助于避免括号,比如foo $ bar quux
代替foo (bar quux)
. 我理解对了吗?后一种形式是否被认为是“坏风格”?
haskell - 相互递归——有人可以帮助解释这段代码是如何工作的吗?
我正在阅读“A Gentle Introduction to Haskell”,并在早期使用了这个示例,该示例在 GHC 中运行良好,但在我的大脑中却非常糟糕:
和调用代码:
take 10 reqs
我看到它的方式是reqs
被调用,产生一个调用client
args 0 和resps
. 因此resps
现在不需要被调用......这又会reqs
再次调用?这一切似乎都是无限的......如果有人能详细说明它是如何工作的,我将不胜感激!
string - 显示在haskell中重复的单词列表
我需要能够编写一个函数来显示字符串中的重复单词并按出现的顺序返回字符串列表并忽略非字母
例如在拥抱提示
haskell - Typed FP: Tuple Arguments 和 Curriable Arguments
在静态类型的函数式编程语言中,如标准 ML、F#、OCaml 和 Haskell,函数通常会使用彼此分隔的参数和函数名称简单地通过空格来编写:
这里的类型是“ int -> (int -> int)
”,即一个函数,它接受一个 int 并返回一个函数,该函数又接受一个 int 并最终返回一个 int。因此,柯里化成为可能。
也可以定义一个以元组作为参数的类似函数:
(int * int) -> int
在这种情况下,类型变为“ ”。
从语言设计的角度来看,有什么理由不能简单地识别类型代数中的这两种类型模式?换句话说,使得“(a * b) -> c”简化为“a -> (b -> c)”,从而允许两个变体同样容易地被柯里化。
我想这个问题一定是在设计我提到的四种语言时出现的。那么有没有人知道任何原因或研究表明为什么所有这四种语言都选择不“统一”这两种类型模式?
exception - 如何处理这个异常?
Haskell 今天让我头疼。我想处理一个异常。当它到达顶部时,它会打印如下:
*** 例外:../p/trip/Trip.hs:(88,16)-(89,50):函数拆分中的非详尽模式
对我来说,它看起来像是 PatternMatchFail,但这不起作用:
我的意思是,它编译,但不处理异常。我究竟做错了什么?这是错误的例外还是什么?有没有办法捕捉任何异常?