gpt4 book ai didi

haskell - Teletype IO getLine 函数

转载 作者:行者123 更新时间:2023-12-02 14:27:14 24 4
gpt4 key购买 nike

我有这个数据类型:

data Teletype a = End a
| Get (Char -> Teletype a)
| Put Char (Teletype a)

该类型的值可用于描述读写字符的程序,并返回 a 类型的最终结果。 。这样的程序可以立即结束( End )。如果它读取一个字符,则程序的其余部分将被描述为取决于该字符的函数( Get )。如果程序写入一个字符( Put ),则会记录要显示的值和程序的其余部分。

我必须编写一个电传打字机程序 getLine它读取字符直到找到换行符,然后返回完整的字符串。到目前为止,我有这个:

getline = Get (\c -> if c == "\n" then (Put c (End c)) else getline )

但它无法编译,因为

Couldn't match expected type ‘Char’ with actual type ‘[Char]’
• In the second argument of ‘(==)’, namely ‘"\n"’
In the expression: c == "\n"
In the expression: if c == "\n" then (Put c (End c)) else getline

最佳答案

c 是一个 Char,事实上,数据构造函数表示 Get (Char -> Teletype a)"\n" 不是 Char,而是 String(因此 [Char])。

您可以通过与 '\n' 进行比较(注意单括号)来与新行进行比较:

getline :: Teletype Char
getline = Get (\c -> if c == <b>'\n'</b> then Put c (End c) else getline)

正如 @chi 所说,这不是练习的完整解决方案。这修复了本地问题,以便您可以继续解决它。

关于haskell - Teletype IO getLine 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57856241/

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