例如,如何可以利用大寫字母這樣我定義一個函數來生成斐波那契數:FIBÑ 我需要只使用大寫字母這樣從終端調用該函數:FIB 7如何在Haskell中使用大寫字母定義函數?
回答
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
這允許用戶在數據構造的確切姓名後,那麼你就可以解釋這個數據構造函數(是的,這是一個非常簡單的交互式腳本語言的完整代碼,只能執行fibs,階乘和添加)到結果中。如果輸入了無效操作,它將以Invalid operation
進行響應。您只能用CTRL-C退出翻譯。
這是一堂課。無論如何,你認爲實現這一目標的唯一方法是通過獲取字符串輸入並處理它來調用所需的函數嗎? – Reeshabh 2014-11-14 21:12:54
@Reeshabh在這種情況下,是的。如果你要爲你的類寫某種[REPL(http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop),你就必須做到這一點無論如何解析。如果你只是想在GHCi中做到這一點,那麼你將不得不使用一個以小寫字母開頭的標識符。我將編輯我的答案,以展示您可以做什麼的幾個例子。 – bheklilr 2014-11-14 21:14:52
謝謝。這非常有幫助! – Reeshabh 2014-11-14 22:44:26
好了,你不能。函數和變量名稱必須以小寫字母開頭。第一個大寫字母被保留用於類型構造: Haskell specs
不只是類型的構造函數;一般的構造函數,以及類。 – dfeuer 2014-11-14 21:35:24
- 1. 如何在javascript中使用大寫字母函數映射數組?
- 2. 大寫字母小寫函數C
- 3. 計算haskell中的大寫字母和小寫字符
- 4. 如何大寫自定義textview中的第一個字母?
- 5. Haskell函數定義
- 6. 使用javascript大寫首字母大寫
- 7. 如何在Haskell中編寫showIt函數?
- 8. 函數定義在Haskell
- 9. 如何在使用Java的字符串中首字母大寫?
- 10. VB.net我如何使大寫字母是小寫字母
- 11. 如何在字符串中使用Javascirpt大寫字母的第一個字母
- 12. 在用戶定義的函數中增加字母數字值
- 13. 使用jQuery自定義字母大小
- 14. 如何識別TSQL中的大寫字母和小寫字母?
- 15. 如何小寫字母轉換爲大寫字母和大寫字母爲小寫字母
- 16. 用大寫字母
- 17. 函數在Haskell中的定義(GHCİ)
- 18. 在C中使用大寫字母和小寫字母對字符串排序
- 19. NASM - 何時使用大寫字母
- 20. 如何在datagridview單元格中允許大寫字母,數字?
- 21. 使用REGEXP函數來插入大寫字母和它前面
- 22. 在collection_select上使用大寫字母
- 23. 我如何用大小寫字母和數字填充數組?
- 24. 如何僅將大寫字母的首字母大寫,而將其餘字母大寫?
- 25. 計數大寫字母
- 26. 如何忽略小寫字母或大寫字母?
- 27. 如何顯示小寫字母和大寫字母
- 28. 如何用大寫字母替換特定字符?
- 29. 如何在html中將大寫字母轉換爲小寫字母
- 30. 如何在Haskell/GHCi中查看函數的定義?
恐怕你不能。看看關於同樣事情的鏈接問題,瞭解更多的細節和策略來解決這個限制。 – 2014-11-14 21:10:41