任何人都可以提供少於5行的代碼,我可以保存爲.hs並作爲haskell程序運行,並看到魔法發生?互聯網有時候非常複雜。需要最簡單的Haskell程序
回答
洛爾我綁定寫完全相同的答案。 – rekire
這個答案的更側重於 「看魔術發生」:
data Expression = Greeting | Leaving
f :: Expression -> String
f Greeting = "Hi there!"
f Leaving = "Ok, bye!"
main = putStrLn (f Greeting)
打印每一個數字:
main = mapM_ print [1..]
但是,根據行緩衝,這可能永遠不會顯示任何東西... – amindfv
'print'自動附加新行,因爲它等同於'putStrLn。 show',所以它將在所有緩衝方案下顯示輸出。我也只是測試每個緩衝方案,以確保。 –
如何所有的斐波那契數?那麼,爲了簡潔起見,你可以打印一些像其中的100個;;)
fibs = 1 : scanl (+) 1 fibs
main = print $ take 100 fibs
你可以去歡樂。這裏greet
是一個函數,它的名稱,使問候出來的:
greet xs = "\nHello, " ++ xs
main = do
putStrLn $ unlines ["Hi! I'm a Haskell program.", "Who are you?"]
fmap greet getLine >>= putStrLn
main
使用unlines
把字符串列表到一個單一的換行符分隔的字符串,然後用putStrLn
打印它。 getLine
返回用戶輸入的文本行(不帶換行符),然後將greet
應用於該行。最後我們把它作爲輸入到另一個putStrLn
。
這是一個有點密集,絕對不是最簡單的,但它確實使用無限列表[1..]
,你可以稱之爲魔術。
described name list = putStrLn ("\n" ++ name) >> mapM_ print (zip [1..] list)
main = let somenums = [1..100] in do
described "Some cubes:" [ x^3 | x <- somenums]
described "Some powers:" $ map (2^) somenums
described "Some triangle numbers:" $ scanl (+) 0 somenums
的described
函數打印的說明,然後打印與他們的位置成對的列表(壓縮)。 我在幾個數字序列上使用它。整數數據默認爲Integer
,這就是爲什麼它可以愉快地告訴你2^100
。數據類型Int
更受限制,(maxBound :: Int == 2147483647
),但當然需要更少的時間和空間。
哇,這是強大的。可能對我的大腦來說有點太過於處理,只是還沒有大聲笑。但我會在不久的將來回到這個評論。謝謝AndrewC! – Emanegux
應該有人提到interact
既簡單又實用的實際:
main = interact reverse
$ cat interact.hs | runhaskell interact.hs esrever tcaretni = niam
從而與
main = interact (unwords . reverse . words)
$ cat interact.hs | runhaskell interact.hs words) . reverse . (unwords interact = main
或進口
import Data.List
main = interact (intersperse '\n')
$ echo "hello" | runhaskell interact.hs h e l l o
,或者現在編譯:
main = interact showCharcount
where showCharcount str = show (length str) ++ "\n"
$ ghc --make -O2 interact.hs -o charcount $ echo "hello world" | ./charcount 12
在這種情況下,這是有道理的,開始做了一些窮人的標杆:
$ time cat /usr/share/dict/words | ./charcount 2486813 real 0m0.096s
非常好 - 四個簡短,清晰的程序。 – AndrewC
海明數字號碼,唐沒有任何主要因素大於5.也就是說,他們有形式2^i * 3^j * 5^k。它們的前20個是:
[1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36]
的第五十○萬之一是:
1962938367679548095642112423564462631020433036610484123229980468750
印刷在第五十○萬酮(計算的短暫的時間後)的程序是:
merge [email protected](x:xs) [email protected](y:ys) =
case (x`compare`y) of
LT -> x:merge xs yys
EQ -> x:merge xs ys
GT -> y:merge xxs ys
hamming = 1 : m 2 `merge` m 3 `merge` m 5
where
m k = map (k *) hamming
main = print (hamming !! 499999)
這比你想要的5行代碼長。當然,它可能是高爾夫球,但我寧願自然寫它,看看你需要多少線來計算在任何其他語言的數量,具有合理的執行時間。
從Tutorials/Programming Haskell/String IO注意多個啓動簡短的例子;例如相當於打壞cat < myFile.txt
,
main = interact id
其中interact
從標準輸入(這裏myFile.txt
)應用一個函數(在這種情況下,身份功能id
)上的內容。
編譯並如下運行它,
ghc --make short.hs
./short < myFile.txt
- 1. 簡單的C程序 - 幫助需要
- 2. 簡單的Ruby程序...需要幫助
- 3. 簡單的android應用程序需要簡單的想法
- 4. 簡單的Haskell程序犯規與GHCI
- 5. 簡單的VBA例程需要考試
- 6. 學習C#,需要簡單的教程
- 7. 簡單LINQ需要
- 8. 我想要最簡單的ajax表單應用程序
- 9. 最簡單的應用程序最簡單的RNN?
- 10. 簡單的regex需要
- 11. 簡單的preg_match需要
- 12. 簡單的PHP程序需要更少的時間來執行
- 13. 需要幫助的一個簡單的C#程序!
- 14. 需要一些簡單的訪問程序的提示
- 15. 需要簡單的Eclipse Android應用程序編碼的幫助
- 16. 簡單的彈簧引導應用程序 - HttpServletResponse的需要
- 17. 簡單線程示例需要
- 18. 簡單的rails應用程序需要使用數據庫嗎?
- 19. 簡單的標籤「屏幕保護程序」幫助需要
- 20. 簡單的記事本數據輸入程序需要修復
- 21. 簡單的struts應用程序需要互聯網運行?
- 22. R永遠需要計算一個簡單的程序
- 23. 需要一個簡單的基準測試程序4
- 24. ArrayIndexOutOfBoundsException在Java中需要使用簡單的命令行程序
- 25. 一個簡單的C語言程序,需要一些輸入
- 26. 類預期錯誤。需要簡單的程序
- 27. 我需要一個非常簡單的程序(任何語言)
- 28. 一個簡單的Java程序我需要
- 29. 需要幫助寫一個簡單的程序
- 30. 需要幫助簡單的Java程序2種方法
'回聲 「主=回報()」 | runhaskell',因爲你問過「最簡單」的程序。 :-) – David