假设f的类型为Int -> Int,g的类型为Int -> Int -> Int。现在,让h x y = f (g x y).来定义h,下面哪一种说法是正确的,为什么(为什么不)?(g x)据推测,只有b.是真的,其他的都是假的。我认为a和b是等价的..。是说两个函数是相等的。只有当我在两边的末尾加上一个参数时,两个函数才是相等的。所
在“Haskell中的编程”一书中,foldr的定义是:foldr f v [] = v
foldr f v (x:xs)因为f被应用于[a],所以(a -> b -> b)中的参数a是显而易见的。参数v有b类型,但是(a -> b -> b)和(a -> b -> b) -> b -> a -> b
我担心Haskell懒惰评估的效率。考虑以下代码 where x = head [1..]在这里,由于懒惰,x首先保留head [1..]的表达式而不是结果1,但是当我调用x + x时,表达式head [1..]会被执行两次吗?我在haskell.org上找到了以下描述
另一方面,惰性评估意味着只在需要表达式结果时才对其进行评估(注意从“约简”到“评估”的转变)。因此,当计算引擎看到一个表达式时,它构建了一个包含计算表达式所需的<
我是一个新程序员,正在使用Haskell。我发现了一行名为find的代码,它将字符串与列表中相应的字符串对进行匹配。就像这样我不完全理解这个程序在说什么,对于列表理解,因为我从来没有见过x|(y,x)以这样的方式使用,我主要看到它被用作x|x或x|x^那么,这是否意味着从您的输入列表中找到字符串A B = x的列表理解,其中x是来自您的B的一<e
我一直在读Doets和Eijck合著的Haskell Road to Logic,Math and Programming 2004。这似乎是一本备受推崇的书,但当它声称Haskell是Lisp大家庭的一员时,我感到震惊。这是准确的吗?我认为Lisp的特点是s表达式、不纯函数和列表是唯一的复合数据结构。Haskell没有这样的东西。