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

Haskell项目使用stack/interact时字符计数异常及特殊符号咨询

解答你的Haskell程序问题

我来帮你拆解这两个问题:

1. 为什么管道输入时字符计数多1?

原因出在more命令的行为上:

  • 当你直接在终端输入abcd然后按<CTRL>-D时,程序接收到的输入就是纯字符串"abcd"(没有末尾的换行符),所以length input返回4。
  • 而当你用more sample.txt输出到管道时,如果sample.txt本身没有换行符,more会自动在输出的末尾添加一个换行符。这时候程序接收到的输入是"abcd\n"(字符串加一个换行符),length计算自然是5。

如果你想验证这一点,可以用cat代替more试试:cat sample.txt | stack exec firststeps-exe,这时候如果sample.txt确实没有换行,程序应该会输出4——因为cat不会额外添加换行符。

2. 反向%符号是什么?

这个是shell的提示符标记,用来提示你当前输出行没有以换行符结尾:

  • 你的程序interact my_fkt会把输入处理后直接输出结果,也就是show (length input),这个结果是一个数字字符串(比如"4"或"5"),但它没有包含末尾的换行符。
  • 当程序输出结束后,shell会直接在当前行显示提示符(你的shell提示符是%),但因为前一行没有换行,shell会把提示符显示成反向(或高亮)的样式,用来区分这不是程序输出的内容,而是shell的提示符,同时提示你当前行的输出没有正常结束。

如果想让输出更整洁,可以修改my_fkt,在结果后面加一个换行符:

my_fkt input = show (length input) ++ "\n"

这样程序输出会以换行结尾,shell提示符就会正常显示在下一行,不会出现反向的%了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:31:54