Questions tagged «haskell»

Haskell是一种功能性编程语言,具有强大的静态类型,惰性评估,广泛的并行性和并发支持以及独特的抽象功能。

7
Haskell函数组成(。)和函数应用程序($)的成语:正确使用
我一直在阅读Real World Haskell,并且快要结束了,但是风格问题一直困扰着我与(.)and ($)运算符。 当您编写一个由其他功能组成的函数时,可以这样写: f = g . h 但是,当您在这些函数的末尾应用某些内容时,我会这样写: k = a $ b $ c $ value 但是这本书会这样写: k = a . b . c $ value 现在,在我看来,它们在功能上是等效的,它们在我眼中的作用完全相同。但是,我看的越多,人们见到的书就越多,就像书中写的那样:(.)首先编写,然后最后才使用($)附加值来评估手数(没人会用很多美元组成) 。 是否有理由比使用所有($)符号更好地使用书籍方式?还是我没有得到一些最佳实践?还是它是多余的,我根本不必担心它?

4
依赖方法类型有哪些引人注目的用例?
依赖的方法类型以前曾经是实验性功能,现在默认情况下已在主干中启用,显然,这似乎在Scala社区中引起了一定的兴趣。 乍一看,这可能会产生什么效果尚不清楚。Heiko Seeberger在此处发布了一个简单的依赖方法类型的示例,从注释中可以看出,可以很容易地在方法上使用类型参数来复制它们。因此,这不是一个非常引人注目的例子。(我可能缺少明显的东西。如果是,请更正我。) 在依赖方法类型明显优于替代方法的情况下,有哪些实用且有用的用例示例? 我们可以对他们做哪些以前不可能/不容易做的有趣事情? 他们通过现有的类型系统功能向我们购买什么? 此外,从属方法类型是否类似于在其他高级键入语言(例如Haskell,OCaml)的类型系统中找到的任何功能或从中获得启发?

4
引用Haskell中的列表时,“ @”符号是什么意思?
我遇到了一段Haskell代码,如下所示: ps@(p:pt) @在这种情况下,该符号是什么意思?我似乎无法在Google上找到任何信息(不幸的是,很难在Google上搜索符号),并且在Prelude文档中也找不到该功能,因此我想它一定是某种语法糖。
127 haskell  syntax 


8
您如何在Haskell中表示图?
使用代数数据类型很容易在haskell中表示树或列表。但是,您将如何以印刷方式表示图形?看来您需要指针。我猜你可能会喜欢 type Nodetag = String type Neighbours = [Nodetag] data Node a = Node a Nodetag Neighbours 那将是可行的。但是,感觉有点分离。结构中不同节点之间的链接并不像列表中当前的上一个元素和下一个元素之间的链接或树中节点的父级和子级之间的链接那样“牢固”。我有一种预感,即在我定义的图形上进行代数运算会受到标记系统引入的间接级别的影响。 正是这种怀疑和对自卑的感觉使我提出了这个问题。在Haskell中是否存在一种更好/更数学上优雅的图形定义方法?还是我偶然发现了一些本来就困难/基本的东西?递归数据结构很不错,但这似乎是另外一回事。与树和列表如何自引用不同意义上的自引用数据结构。就像列表和树在类型级别是自引用的,而图在值级别是自引用的。 那么到底是怎么回事?

1
如果阴谋集团或工作目录设置为项目目录,则Emacs Interactive-Haskell不会响应
我在中的Interactive-Haskell repl遇到了奇怪的行为emacs。当我获取文件时,emacs迷你缓冲区会显示一系列交互式提示: Start a new project named 'myproject'? Cabal dir (guessed from myproject.cabal): Build target (empty for default): Set current directory: 如果我将cabal目录或当前目录保留为项目目录的默认值,则repl无响应。我可以在交互式Haskell窗口中看到一个lambda提示符,可以键入,但是当我按Enter键时,它永远不会求值。光标停留在同一行上,就像我根本没有按Enter一样。 如果我将这两个目录都更改为项目目录以外的其他路径,则repl会正常运行并按预期计算表达式。
124 haskell  emacs  cabal  ghci 

2
Haskell数据类型的内存占用量
如何找到在Haskell中存储某种数据类型的值所需的实际内存量(主要是GHC)?是否可以在运行时(例如在GHCi中)对其进行评估,还是可以从其组件中估算复合数据类型的内存需求? 通常,如果已知类型a和的内存要求b,则代数数据类型的内存开销是多少,例如: data Uno = Uno a data Due = Due a b 例如,这些值占用多少字节内存? 1 :: Int8 1 :: Integer 2^100 :: Integer \x -> x + 1 (1 :: Int8, 2 :: Int8) [1] :: [Int8] Just (1 :: Int8) Nothing 我知道实际的内存分配是由于延迟垃圾回收而导致的。由于懒惰的评估,它可能有很大的不同(并且thunk的大小与值的大小无关)。问题是,在给定数据类型的情况下,充分评估其值会占用多少内存? 我发现:set +sGHCi中有一个选项可以查看内存统计信息,但是目前尚不清楚如何估算单个值的内存占用量。

4
带有无限列表的foldl与foldr行为
此问题中 myAny函数的代码使用文件夹。当满足谓词时,它将停止处理无限列表。 我用foldl重写了它: myAny :: (a -> Bool) -> [a] -> Bool myAny p list = foldl step False list where step acc item = p item || acc (请注意,step函数的参数正确颠倒了。) 但是,它不再停止处理无限列表。 我试图按照Apocalisp的回答来跟踪函数的执行: myAny even [1..] foldl step False [1..] step (foldl step False [2..]) 1 even 1 || (foldl step …

6
Haskell类型与数据构造器
我正在从learningyouahaskell.com学习Haskell 。我在理解类型构造函数和数据构造函数时遇到麻烦。例如,我不太了解两者之间的区别: data Car = Car { company :: String , model :: String , year :: Int } deriving (Show) 还有这个: data Car a b c = Car { company :: a , model :: b , year :: c } deriving (Show) 据我了解,第一种方法只是使用一个构造函数(Car)来构建type数据Car。我不太了解第二个。 另外,如何定义数据类型,如下所示: data Color = Blue …
124 haskell 

3
读者monad的目的是什么?
读者monad是如此复杂,似乎毫无用处。如果我没有记错的话,在命令式语言(如Java或C ++)中,读者monad没有等效的概念。 您能给我一个简单的例子,并澄清一下吗?

16
Haskell入门指南?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我一直在寻找关于Haskell的不错的指南,但是却找不到一个足够有趣的指南来阅读和/或理解。 几年前,我曾接触过Haskell,但对此我记不清了。我记得当我终于得到它的时候,“ Aha!”的感觉真是不可思议,而且玩起来真的很有趣,所以我希望重新发现Haskell丢失的艺术。 我对Ruby及其功能编程技巧很熟悉,所以我认为我并不完全是黑暗。有链接吗?


8
Haskell是否需要垃圾收集器?
我很好奇为什么Haskell实现使用GC。 我想不出用纯语言来进行GC的必要性。仅仅是减少复制的优化,还是实际上有必要? 我正在寻找示例代码,如果不存在GC,这些代码可能会泄漏。

5
Haskell中“ Just”语法的含义是什么?
我在互联网上搜寻了此关键字的实际解释。我看过的每个Haskell教程都只是随机使用它,而从不解释它的作用(并且我看过很多)。 这是Real World Haskell使用的基本代码Just。我了解代码的功能,但不了解其目的或功能Just。 lend amount balance = let reserve = 100 newBalance = balance - amount in if balance < reserve then Nothing else Just newBalance 根据我的观察,它与Maybe打字有关,但这几乎是我所学的。 一个很好的解释Just意味着什么,将不胜感激。
118 haskell  syntax 

11
为什么极简主义的示例Haskell快速排序不是“真正的”快速排序?
Haskell的网站引入了非常有吸引力的5行快速排序功能,如下所示。 quicksort [] = [] quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) where lesser = filter (< p) xs greater = filter (>= p) xs 它们还包括“ C中的True quicksort”。 // To sort array a[] of size n: qsort(a,0,n-1) void qsort(int a[], int lo, int hi) { int h, …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.