sortBy和interact一起工作相互协作吗?

发布于 2024-11-15 07:28:35 字数 177 浏览 1 评论 0原文

这是我的代码中的一个片段:

io f = interact (unlines . f . lines)

io (sortBy compare (read :: String -> Int))

所以我读取这些行,获取数值,然后按它们排序。愿意引导我走上正确的道路吗?

here's a snip from my code:

io f = interact (unlines . f . lines)

io (sortBy compare (read :: String -> Int))

so I read the lines, get the numeric value, and sort by them. Care to guide me in the right path?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北座城市 2024-11-22 07:28:35

您需要使用 Data.Ord 模块中的 comparing 而不是 compare

import Data.Ord
import Data.List

io f = interact (unlines . f . lines)
main = io (sortBy (comparing (read :: String -> Int)))

You need to use comparing from the Data.Ord module instead of compare:

import Data.Ord
import Data.List

io f = interact (unlines . f . lines)
main = io (sortBy (comparing (read :: String -> Int)))
扶醉桌前 2024-11-22 07:28:35

也许我不太明白你的问题,但这就是我得到它的方法:

函数 interact 将来自 stdin 的输入输入到你的程序中,并将结果放入 标准输出。使用linesunlines,您可以得到按行分割的输入和输出,因此您可以实际在该层上进行操作。您的函数 io 现在除了将函数 f 放入此框架之外什么也不做。

接下来,sortBy Compare 只不过是sort。所以你基本上将行转换为数字并以这种方式对它们进行排序。结果是一个数字列表。您可能已经注意到,您的程序此时无法进行类型检查,因为 unlines 需要 [String] 而不是 [Int]输入。将函数更改为 map show $sort (read :: String -> Int) 来解决此问题。我实际上会编写 map show $ sort (asTypeOf 0 . read) 来代替,使其成为Integer而不是Int`并且更具可读性。

Maybe I don't really understand your question, but this is how I got it:

The function interact feeds the input from stdin into your program and puts the result to stdout. Using lines and unlines, you get both the input and output split by lines, so you can actually operate on this layer. Your function io now does nothing else then putting the function f into this framework.

Next, sortBy compare is nothing else than sort. So you basically convert the lines to numbers and sort them this way. The result is a list of numbers. You may have noticed, that your program fails to typecheck at this point, as unlines expects a [String] and not a [Int] for the input. Change your function to map show $ sort (read :: String -> Int) to fix this. I would actually write map show $ sort (asTypeOf 0 . read) instead, making it anIntegerinstead of anInt` and more readable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文