Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯凯尔的斯普利特是干什么的?_Haskell_Split_Functional Programming_Reverse - Fatal编程技术网

Haskell 哈斯凯尔的斯普利特是干什么的?

Haskell 哈斯凯尔的斯普利特是干什么的?,haskell,split,functional-programming,reverse,Haskell,Split,Functional Programming,Reverse,我是Haskell的新手,我接触了下面的代码,但实际上并不了解它的功能。 我知道toDigits函数被声明为获取一个Integer并返回一个Integers数组。如果参数n等于0或更小,我们返回一个空数组,否则。。。?这就是谜团 toDigits :: Integer -> [Integer] toDigits n | n < 1 = [] | otherwise = reverse $ split [] n where split _ 0 = []

我是Haskell的新手,我接触了下面的代码,但实际上并不了解它的功能。 我知道
toDigits
函数被声明为获取一个
Integer
并返回一个
Integer
s数组。如果参数
n
等于0或更小,我们返回一个空数组,否则。。。?这就是谜团

toDigits :: Integer -> [Integer]
toDigits n
  | n < 1     = []
  | otherwise = reverse $ split [] n
    where split _   0 = []
          split acc m = lastDigit m : split acc (dropLastDigit m)
toDigits::Integer->[Integer]
托迪金
|n<1=[]
|否则=反向$split[]n
其中split 0=[]
拆分acc m=最后一位m:拆分acc(最后一位m)

你能给我解释一下吗?

在这里,它需要一个数字并建立一个数字列表,一个接一个。在每一时刻,它首先检查number参数是否为零(然后返回的值是一个空列表),如果不是,则取其最后一位;b) 在对自身进行递归调用的结果前面加上数字,现在去掉最后一个数字的数字。acc参数从未实际使用过,因为递归最终被确定为模cons


请注意,列表最终是按最小端顺序构建的:列表的第一个元素是数字的最低有效位。

这里,它获取一个数字并逐个构建其数字列表。在每一时刻,它首先检查number参数是否为零(然后返回的值是一个空列表),如果不是,则取其最后一位;b) 在对自身进行递归调用的结果前面加上数字,现在去掉最后一个数字的数字。acc参数从未实际使用过,因为递归最终被确定为模cons

reverse $ split [] n
请注意,列表最终是以最小端顺序构建的:列表的第一个元素是数字的最低有效位

reverse $ split [] n

reverse (split [] n)
它反转
split[]n
的返回值并返回结果

拆分在下一行中定义

它接受一个列表(累加器)和一个整数,并执行以下操作:

注意,我假设split的定义如下(当前实现不使用acc)。我还假设
lastDigit
dropLastDigit
按照他们的名字做:

split acc 0 = acc
split acc m = split (lastDigit m : acc) (dropLastDigit m)
现在,split如果m为零,则返回acc,否则它递归地将m的最后一个数字前置到acc,并将其作为第一个参数传递给split,并从m中删除最后一个数字,并将其作为第二个参数传递给split。换句话说,该函数最终将一个数字拆分为其数字,并将结果作为整数列表返回。这样调用
split[]1234
将返回
[1,2,3,4]
。您可能不需要反转调用split的结果

reverse (split [] n)
它反转
split[]n
的返回值并返回结果

拆分在下一行中定义

它接受一个列表(累加器)和一个整数,并执行以下操作:

注意,我假设split的定义如下(当前实现不使用acc)。我还假设
lastDigit
dropLastDigit
按照他们的名字做:

split acc 0 = acc
split acc m = split (lastDigit m : acc) (dropLastDigit m)

现在,split如果m为零,则返回acc,否则它递归地将m的最后一个数字前置到acc,并将其作为第一个参数传递给split,并从m中删除最后一个数字,并将其作为第二个参数传递给split。换句话说,该函数最终将一个数字拆分为其数字,并将结果作为整数列表返回。这样调用
split[]1234
将返回
[1,2,3,4]
。您可能不需要反转调用split的结果。

该实现中从未使用acculator参数。它可能应该被省略。你怎么做
lastDigit
dropLastDigit
呢?累加器参数从未在该实现中使用过。可能应该省略它。
lastDigit
dropLastDigit
做什么?