例如,如何使用大写字母定义一个生成斐波那契数的函数,如下所示:FIB n 我需要使用大写字母从终端调用函数,如下所示:FIB 7
答案 0 :(得分:3)
You can't。 Haskell中的函数必须以小写的unicode字符或下划线开头。以大写字母开头的符号保留给类型和构造函数。
为什么需要仅使用大写字母从终端调用该函数?这似乎是一个相当随意的约束。
如果你真的想读STDIN并处理它,我会建议写这样的东西
import System.IO
import Text.Read (readMaybe)
import Control.Monad (forever)
data Operation
= FIB Integer
| FAC Integer
| ADD Integer Integer
deriving (Read)
-- The read instance is important here
fib :: Integer -> Integer
fib 0 = 1
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)
eval :: Operation -> Integer
eval (FIB n) = fib n
eval (FAC n) = product [1..n]
eval (ADD a b) = a + b
repl :: IO ()
repl = forever loop
where
parseResponse :: String -> String
parseResponse resp = case readMaybe resp of
Just op -> show $ eval op
Nothing -> "Invalid operation"
loop = do
putStr "> "
resp <- getLine
putStrLn $ parseResponse resp
main :: IO ()
main = do
hSetBuffering stdin LineBuffering
hSetBuffering stdout NoBuffering
repl
这允许用户输入数据构造函数的 exact 名称,然后解释该数据构造函数(是的,这是一个非常简单的交互式脚本语言的完整代码,只能做结果,纤维,因子和加成。如果输入了无效操作,则会以Invalid operation
回复。您只能使用 CTRL-C 退出解释器。
答案 1 :(得分:0)