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