如何使用大写字母在haskell中定义函数?

时间:2014-11-14 21:02:17

标签: function haskell

例如,如何使用大写字母定义一个生成斐波那契数的函数,如下所示:FIB n 我需要使用大写字母从终端调用函数,如下所示:FIB 7

2 个答案:

答案 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)

嗯,你不能。函数和变量名必须以小写字母开头。第一个大写字母保留给类型构造函数: Haskell specs