Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要最简单的Haskell程序_Haskell - Fatal编程技术网

需要最简单的Haskell程序

需要最简单的Haskell程序,haskell,Haskell,谁能给我提供少于五行的代码,我可以将它们另存为.hs并作为haskell程序运行,然后看到神奇的发生?互联网有时是如此复杂 main = putStrLn "Hello, World!" 从 互联网还不错 这个答案更侧重于“看到奇迹发生”: 打印每个数字: main = mapM_ print [1..] 那么所有的斐波那契数呢?好吧,为了简洁起见,你可以打印100张左右 你可以兴高采烈地去。这里的greet是一个函数,它取一个名字并用它来表示问候: greet xs = "\nHello,

谁能给我提供少于五行的代码,我可以将它们另存为.hs并作为haskell程序运行,然后看到神奇的发生?互联网有时是如此复杂

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,但我更愿意自然地编写它,看看用任何其他语言计算这个数字需要多少行代码,并有合理的执行时间。

请注意,有多个启动短而简单的示例;例如,相当于bash
cat

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