gpt4 book ai didi

haskell - 在模式匹配中使用 `++`

转载 作者:行者123 更新时间:2023-12-02 05:32:45 25 4
gpt4 key购买 nike

将以下内容输入 GHC 解释器

let describe' all@([x] ++ [y]) = "The first letter of " ++ all ++ " is " ++ [x]

产量

Parser error in pattern: [x] ++ [y]

为什么 Haskell 无法将模式 all@([x]++ [y])"HI"[1, 2]?

最佳答案

假设您可以在 ++ 上进行模式匹配 - 现在考虑如何匹配它:

a ++ b = [1,2]

你可以:

  • a = [1,2], b = []
  • a = [1], b = [2]
  • a = [], b = [1,2]

现在什么是正确的?


技术原因是 ++ 不是数据构造函数 ;)


在你的具体情况下你可以使用

let describe' all@[x,y] = "The first letter of " ++ all ++ " is " ++ [x]

(这只会匹配长度为 exactly 2 的字符串)

或更好

let describe' all@(x:_) = "The first letter of " ++ all ++ " is " ++ [x]

(这将匹配所有长度至少为 1 的字符串)

一个安全的版本应该是这个

describe' :: String -> String
describe' "" = "your input was empty"
describe' all@(x:_) = "The first letter of " ++ all ++ " is " ++ [x]

关于haskell - 在模式匹配中使用 `++`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36289190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com