Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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_Functional Programming - Fatal编程技术网

Haskell 替换定义

Haskell 替换定义,haskell,functional-programming,Haskell,Functional Programming,我正试图得到一个程序,它提供了所有可能的方法,根据一个新组件和一个列表,将一个组件交换到一个新的组件。我的目标是写一些简单的东西,比如: max3 :: Ord a => a -> a -> a -> a max3 a b c | a > b && a > c = a | b > a && b > c = b | c > a && c > b = c

我正试图得到一个程序,它提供了所有可能的方法,根据一个新组件和一个列表,将一个组件交换到一个新的组件。我的目标是写一些简单的东西,比如:

max3 :: Ord a => a -> a -> a -> a
max3 a b c
      | a > b && a > c = a
      | b > a && b > c = b
      | c > a && c > b = c
      | otherwise = error "."
例如:

replacements :: a -> [a] -> [[a]]
replacements 'x' "abc" == ["xbc","axc","abx"]
replacements 1 [] == []

这里有一种编写替换的方法:

replacements::a->[a]->[[a]]
替换项[]=[]
替换x(y:ys)=(x:ys):映射(y:)(替换x ys)
为了理解递归,可以更详细地编写如下内容:

replacements::a->[a]->[[a]]
替换项[]=[]
替换x(y:ys)=
让第一个=x:ys
recur=替换x ys
rest=map(\x_带y->y:x_带y)重复出现
第一:休息
手动评估前者以替换“x”和“abc”:

正如Will Ness所暗示的,您可能希望用高阶函数而不是显式递归来表达这一点。要详细说明威尔的提示,请尝试使用
inits
tails

λ> import Data.List
λ> inits "abc"
["","a","ab","abc"]
λ> tails "abc"
["abc","bc","c",""]
λ> zip (inits "abc") (tails "abc")
[("","abc"),("a","bc"),("ab","c"),("abc","")]
然后看看。(部分内容包含在中。)


我也不知道
max3
与这个问题有什么关系,但另一种编写
max3
的方法是:

max3::Ord a=>a->a->a->a
最大值3 a b c=最大值a(最大值b c)

这里有一种编写替换的方法:

replacements::a->[a]->[[a]]
替换项[]=[]
替换x(y:ys)=(x:ys):映射(y:)(替换x ys)
为了理解递归,可以更详细地编写如下内容:

replacements::a->[a]->[[a]]
替换项[]=[]
替换x(y:ys)=
让第一个=x:ys
recur=替换x ys
rest=map(\x_带y->y:x_带y)重复出现
第一:休息
手动评估前者以替换“x”和“abc”:

正如Will Ness所暗示的,您可能希望用高阶函数而不是显式递归来表达这一点。要详细说明威尔的提示,请尝试使用
inits
tails

λ> import Data.List
λ> inits "abc"
["","a","ab","abc"]
λ> tails "abc"
["abc","bc","c",""]
λ> zip (inits "abc") (tails "abc")
[("","abc"),("a","bc"),("ab","c"),("abc","")]
然后看看。(部分内容包含在中。)


我也不知道
max3
与这个问题有什么关系,但另一种编写
max3
的方法是:

max3::Ord a=>a->a->a->a
最大值3 a b c=最大值a(最大值b c)

提示:看一下
inits
tails
。我无法理解这个问题。我知道替换的功能,但我不知道它与max3有什么关系。这只是一个例子,我想使用用例选择(guard)。哦,我明白了,所以你想编写一个类似于max3的函数,它的工作原理类似于替换的功能?不,他想要一个看起来像
minimum
但工作起来像
foldr
的函数提示:看看
inits
tails
。我不能理解这个问题。我知道替换的功能,但我不知道它与max3有什么关系。这只是一个例子,我想使用用例选择(guard)。哦,我明白了,所以你想编写一个类似于max3的函数,它的工作原理类似于替换的功能?不,他想要一个看起来像
minimum
但工作起来像
foldr