例如,您拥有
InttoIntList x y
其类型转换为
Int -> Int -> [Int]
如何为两个列表类型(例如[Int]
答案 0 :(得分:1)
基本情况不取决于函数的类型。是的,类型经常会提示。例如,对于一个列表,一个基本案例通常是空列表[]
,但本身不是。
此外,常见的误解是函数采用两个或多个参数。在Haskell中,每个函数都精确地 一个参数。但是,输出可能是再次带有参数的函数(此处就是这种情况)。
在解决了这两个问题之后,出现了InttoIntList
的基本情况是什么的问题。好吧,基本案例是不涉及递归的案例。如果我正确理解您的功能,则希望生成一个数字列表,该数字每次从第一个Int
到第二个Int
递增。
因此,基本情况可能是第一个Int
大于第二个Int
的情况。在这种情况下,我们可能希望返回一个空列表,所以:
intToIntList m n | m > n = [] -- base case
,则递归情况是m <= n
时。在这种情况下,我们通常希望返回以m
开头的列表,然后返回由intToIntList (m+1) n
产生的列表,因此:
| otherwise = m : intToInt (m+1) n
这里(:) :: a -> [a] -> [a]
是一个列表构造函数。它将创建一个列表,其中{<1>}是 head (第一个元素),而m
是 tail (其余元素)。
或将其放在一起:
intToInt (m+1) n