【发布时间】:2026-02-14 00:10:01
【问题描述】:
这是家庭作业的一部分。
我需要编写一个从输入读取信息直到空行的函数。在该函数之后,将第一个、第三个、第五个...行符号作为一个字符串,将第二个、第四个...作为另一个字符串。
签名是combine :: IO (String , String)
我编写了一个函数,它接受一个列表作为参数并将 1,3,5.. 放入一个 String 一个 2,4,6 个符号到另一个 String。功能在这里:
intotwo (x : xs)
= let
(us , vs)
= intotwo xs
in
(x : vs , us)
intotwo _
= ([] , [])
我还编写了一个读取输入的代码:它在这里:
combine
= do
lines <- getLine
if null lines
then return ([], [])
else do
linesagain <- combine
return --what should I return?
谁能帮我完成作业(可选:提供一些提示)?
【问题讨论】:
-
你还没有解释你现在卡在哪里了。您的思路是什么,实现工作成果还缺少什么?
-
else 分支中的返回语句。我的意思是我需要如何调用函数来实现所需的结果。
-
“返回”的表达式(请注意,返回与 C 中的返回不同)必须与函数签名中预期的类型匹配。因此,
return必须将某些内容提升到 IO monad,这意味着您必须返回一个字符串元组。 -
我知道我应该返回一个字符串元组,但我知道如何完成我的任务。
-
好吧,您可能需要重新考虑您的方法。另一种方法是先将所有行读入一个列表,然后使用 combine 将该列表划分为两个列表,然后使用
return返回。
标签: list function haskell input