You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中直接匹配字符串'hello'的函数为何无法运行?

问题解答

你的代码无法运行的核心原因是Haskell对单引号和双引号的语义有严格区分:

  • 单引号'仅用于表示单个字符(比如习题3里的'a'),'hello'这种写法属于语法错误——编译器会认为你试图把多个字符塞进单个字符的定义中,这不符合Haskell的语法规则。
  • 字符串在Haskell里本质是字符列表[Char],必须用双引号"hello"来表示,或者用列表构造符:拼接单个字符的形式。

正确写法1:直接匹配字符串

把单引号替换为双引号即可正常运行,用通配符_匹配所有其他字符串会更简洁:

f :: [Char] -> Bool
f "hello" = True
f _ = False

正确写法2:使用题目要求的列表字符模式

按照习题里提到的“列表模式指定每个字符”,可以将字符串拆分为字符链表的形式进行匹配,这也是Haskell列表模式匹配的标准用法:

f :: [Char] -> Bool
f ('h':'e':'l':'l':'o':[]) = True
f _ = False

这里'h':'e':'l':'l':'o':[]和"hello"是完全等价的,因为字符串就是字符的链表结构,:是链表的构造运算符,[]代表空链表。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:53:14