我还在学习Haskell,我想知道使用一行代码表达以下语句是否有一种不那么冗长的方式:
map (\x -> (x, (if mod x 3 == 0 then "fizz" else "") ++
if mod x 5 == 0 then "buzz" else "")) [1..100]
Run Code Online (Sandbox Code Playgroud)
产品:
[(1,""),(2,""),(3,"fizz"),(4,""),(5,"buzz"),(6,"fizz"),(7,""),(8,""),(9,"fizz"),(10,"buzz"),(11,""),(12,"fizz"),(13,""),(14,""),(15,"fizzbuzz"),(16,""),(17,""),(18,"fizz"),(19,""),(20,"buzz"),(21,"fizz"),(22,""),(23,""),(24,"fizz"),(25,"buzz"),(26,""),(27,"fizz"),(28,""),(29,""),(30,"fizzbuzz")等
感觉就像我对语法的斗争比我应该做的更多.我在Haskell中已经看到了其他问题,但是我正在寻找在单个语句中表达这一点的最佳方式(试图理解如何更好地处理语法).
Lan*_*dei 10
我们不需要stinkin' mod......
zip [1..100] $ zipWith (++) (cycle ["","","fizz"]) (cycle ["","","","","buzz"])
Run Code Online (Sandbox Code Playgroud)
或略短
import Data.Function(on)
zip [1..100] $ (zipWith (++) `on` cycle) ["","","fizz"] ["","","","","buzz"]
Run Code Online (Sandbox Code Playgroud)
或蛮力方式:
zip [1..100] $ cycle ["","","fizz","","buzz","fizz","","","fizz","buzz","","fizz","","","fizzbuzz"]
Run Code Online (Sandbox Code Playgroud)
如果你坚持单线:
[(x, concat $ ["fizz" | mod x 3 == 0] ++ ["buzz" | mod x 5 == 0]) | x <- [1..100]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |