我必须编写 3 个函数:一个将华氏温度转换为摄氏温度,一个将摄氏温度转换为开尔文,第三个使用前两个函数将华氏温度转换为开尔文。
我以前从来没有玩过 Haskell,所以这花了我相当长的时间,虽然现在我发现它很简单。
无论如何,我需要为前两个函数创建交互式 Haskell 程序,并使用它们来组合和执行管道,以获得与第三个函数等效的函数。我一直在阅读管道,它似乎很简单。我的主要问题似乎是使功能具有交互性。
非常感谢任何帮助、提示和资源!
我必须编写 3 个函数:一个将华氏温度转换为摄氏温度,一个将摄氏温度转换为开尔文,第三个使用前两个函数将华氏温度转换为开尔文。
我以前从来没有玩过 Haskell,所以这花了我相当长的时间,虽然现在我发现它很简单。
无论如何,我需要为前两个函数创建交互式 Haskell 程序,并使用它们来组合和执行管道,以获得与第三个函数等效的函数。我一直在阅读管道,它似乎很简单。我的主要问题似乎是使功能具有交互性。
非常感谢任何帮助、提示和资源!
该interact
功能在解决您的问题时应该非常有用。因为 UNIX 约定是进程应该使用文本(而不是数字,如温度)进行通信,这意味着该interact
函数包装了接受String
s 并返回String
s 的函数。这意味着您必须将华氏/摄氏度函数包装在新函数中,这些函数接受和返回字符串而不是数字。
作为一个让你开始的例子,这个程序将给它的所有字符串都大写:
module Main (main) where
import Data.Char (toUpper)
main :: IO ()
main = interact upperCase
upperCase :: String -> String
upperCase = map toUpper
你可以编译它:
ghc uppercase.hs
...然后您可以通过以下方式使用它(在 Linux 上):
echo "bla" | ./uppercase
# Result: "BLA"