首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替换定义

替换定义
EN

Stack Overflow用户
提问于 2019-10-23 12:47:39
回答 1查看 82关注 0票数 1

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

代码语言:javascript
运行
复制
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 "."

例如:

代码语言:javascript
运行
复制
replacements :: a -> [a] -> [[a]]
replacements 'x' "abc" == ["xbc","axc","abx"]
replacements 1 [] == []
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-23 14:34:18

下面是编写replacements的一种方法

代码语言:javascript
运行
复制
replacements :: a -> [a] -> [[a]]
replacements _ [] = []
replacements x (y:ys) = (x:ys) : map (y:) (replacements x ys)

要理解递归,可以更详细地编写如下所示:

代码语言:javascript
运行
复制
replacements :: a -> [a] -> [[a]]
replacements _ [] = []
replacements x (y:ys) =
  let first = x:ys
      recur = replacements x ys
      rest = map (\x_with_ys -> y:x_with_ys) recur
  in first : rest

用手工方法对前者进行replacements 'x' "abc"评价

代码语言:javascript
运行
复制
   replacements 'x' "abc"
~> ('x':"bc") : map ('a':) (replacements 'x' "bc")
~> "xbc" : map ('a':) (('x':"c") : map ('b':) (replacements 'x' "c"))
~> "xbc" : map ('a':) ("xc" : map ('b':) (('x':[]) : map ('c':) (replacements 'x' "")))
~> "xbc" : map ('a':) ("xc" : map ('b':) ("x" : map ('c':) []))
~> "xbc" : map ('a':) ("xc" : map ('b':) ("x" : []))
~> "xbc" : map ('a':) ("xc" : map ('b':) ["x"])
~> "xbc" : map ('a':) ("xc" : ["bx"])
~> "xbc" : map ('a':) ["xc", "bx"]
~> "xbc" : ["axc", "abx"]
~> ["xbc", "axc", "abx"]

正如Ness所暗示的,您可能希望用高阶函数来表示这一点,而不是显式递归。要详细说明威尔的暗示,试着和initstails玩一玩

代码语言:javascript
运行
复制
λ> import Data.List
λ> inits "abc"
["","a","ab","abc"]
λ> tails "abc"
["abc","bc","c",""]
λ> zip (inits "abc") (tails "abc")
[("","abc"),("a","bc"),("ab","c"),("abc","")]

然后看看zipWith。(在李亚赫中有一些报道)

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

代码语言:javascript
运行
复制
max3 :: Ord a => a -> a -> a -> a
max3 a b c = max a (max b c)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58523226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档