我必须编写3个函数:一个将华氏转换为摄氏,一个将摄氏转换为开氏,另一个将华氏转换为开尔文,使用两个第一函数。在Haskell中创建一个交互式程序
我从来没有和Haskell一起玩过,所以这让我花了相当长的时间,但现在我发现它很简单。
无论如何,我需要为前两个函数创建交互式Haskell程序,并使用它们编写和使用管道可执行文件,以获得与第三个函数等效的内容。我一直在阅读管道,它似乎很简单。我的主要问题似乎是使功能交互。
任何帮助,提示和资源非常感谢!
我必须编写3个函数:一个将华氏转换为摄氏,一个将摄氏转换为开氏,另一个将华氏转换为开尔文,使用两个第一函数。在Haskell中创建一个交互式程序
我从来没有和Haskell一起玩过,所以这让我花了相当长的时间,但现在我发现它很简单。
无论如何,我需要为前两个函数创建交互式Haskell程序,并使用它们编写和使用管道可执行文件,以获得与第三个函数等效的内容。我一直在阅读管道,它似乎很简单。我的主要问题似乎是使功能交互。
任何帮助,提示和资源非常感谢!
在解决问题时,interact
函数应该非常有用。由于UNIX惯例是过程应该使用文本(而不是数字,如温度)进行通信,这意味着函数将功能包装为String
并返回String
。这意味着你必须将你的华氏/摄氏温度功能包裹在新的函数中,这些函数可以接收和返回字符串而不是数字。
举个例子,让你开始,这个节目上,案件正在给它的所有字符串:
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"
谢谢哟你这么多的迅速答案!对不起,如果我很密集,请耐心等待。 我所做的是为两个第一个函数(celsiusToKelvin.hs和fahrenheitToCelsius.hs)创建一个单独的.hs文件。我的理解是,使用管道,我应该可以做到: celsiusToKelvin.exe x | fahrenheitToCelsius.exe 应该给我同样的答案,因为我的第三个功能这是: 'fahToKel Z = celToKel(fahToCel Z)' 并在互动功能应用? – 2012-07-15 16:17:11
如果你的程序应该使用管道,你不能'celsiusToKelvin x | fahrenheitToCelsius'。这需要'celsiusToKelvin'程序将其输入作为参数(其中'x'在该位置)而不是标准输入流读取。相反,你必须使用'echo x | celsiusToKelvin | fahrenheitToCelsius'。内置的'echo'程序将其参数写入其标准输出流,然后通过管道将其引导至'celsiusToKelvin'程序的标准输入流。这将产生正确的结果。 – dflemstr 2012-07-15 16:21:57
谢谢,这正是我所需要的。它完美的作品。我回来了我的任务标记,我在这个问题上得到了满分。我的问题是,我的celsiusToKelvin和FahrenheitToCelsius程序每个都有字符串作为用户的提示,当将它们连接在一起时这当然不起作用。我把它们拿出来,它的工作! – 2012-07-25 23:13:02
http://book.realworldhaskell.org/read/io.html – 2012-07-15 15:08:23