需要最简单的Haskell程序
谁能给我提供少于五行的代码,我可以将它们另存为.hs并作为haskell程序运行,然后看到神奇的发生?互联网有时是如此复杂需要最简单的Haskell程序,haskell,Haskell,谁能给我提供少于五行的代码,我可以将它们另存为.hs并作为haskell程序运行,然后看到神奇的发生?互联网有时是如此复杂 main = putStrLn "Hello, World!" 从 互联网还不错 这个答案更侧重于“看到奇迹发生”: 打印每个数字: main = mapM_ print [1..] 那么所有的斐波那契数呢?好吧,为了简洁起见,你可以打印100张左右 你可以兴高采烈地去。这里的greet是一个函数,它取一个名字并用它来表示问候: greet xs = "\nHello,
main = putStrLn "Hello, World!"
从
互联网还不错 这个答案更侧重于“看到奇迹发生”: 打印每个数字:
main = mapM_ print [1..]
那么所有的斐波那契数呢?好吧,为了简洁起见,你可以打印100张左右
你可以兴高采烈地去。这里的
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..]
,您可以称之为magic
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
descripted name list=putStrLn(“\n”++name)>>mapM_uu打印(zip[1..]列表)
main=让somenums=[1..100]进入do
描述了“一些立方体:[x^3 | x应该有人提到交互
,这很简单,也很实用:
main = interact reverse
$ghc--make-O2 interact.hs-o charcount
$echo“hello world”|/charcount
12
在这种情况下,有必要开始做一些穷人的基准测试:
$ time cat /usr/share/dict/words | ./charcount
2486813
real 0m0.096s
$time cat/usr/share/dict/words |/charcount
2486813
实0.096s
汉明数是指素数因子不大于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
打印第500000页的程序(经过短暂计算后)为:
这比你想要的5行代码要长。当然,它可以是golfed,但我更愿意自然地编写它,看看用任何其他语言计算这个数字需要多少行代码,并有合理的执行时间。请注意,有多个启动短而简单的示例;例如,相当于bashcat
main = interact id
其中,interact
将一个函数(在本例中,标识函数id
)应用于标准输入的内容(此处myFile.txt
)
按如下方式编译并运行它
ghc --make short.hs
./short < myFile.txt
ghc——短写.hs
./short
Lol我想写完全相同的答案。我期待着深入学习本教程。谢谢demas。echo“main=return()”| runhaskell
,因为你要求的是“最简单的”程序:-)哇,这太强大了。可能对我的大脑来说有点太多了。哈哈。但我会在不久的将来回到这个评论。感谢AndrewC!print
自动添加新行,因为它相当于putStrLn.show
,所以它会在所有缓冲方案下显示输出。我也刚刚测试过每个缓冲方案,以确保。
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
[1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36]
1962938367679548095642112423564462631020433036610484123229980468750
merge xxs@(x:xs) yys@(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)
main = interact id
ghc --make short.hs
./short < myFile.txt