小编sim*_*ays的帖子

为什么表达式在Haskell中不受欢迎?

这是一个我一直想知道的问题.如果语句是大多数编程语言中的主要语言(至少是我曾经使用过的语句),但在Haskell中,它似乎很不受欢迎.我理解,对于复杂情况,Haskell的模式匹配比一堆ifs更清晰,但是有什么真正的区别吗?

举一个简单的例子,拿一个自制版本的总和(是的,我知道它可能只是foldr (+) 0):

sum :: [Int] -> Int
-- separate all the cases out
sum [] = 0
sum (x:xs) = x + sum xs

-- guards
sum xs
    | null xs = 0
    | otherwise = (head xs) + sum (tail xs)

-- case
sum xs = case xs of
    [] -> 0
    _ -> (head xs) + sum (tail xs)

-- if statement
sum xs = if null xs then 0 else (head xs) + …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching

24
推荐指数
6
解决办法
3567
查看次数

在Haskell中使用TagSoup解析标记

我一直在努力学习如何从Haskell中的HTML文件中提取数据,并且已经碰壁了.我根本不熟悉Haskell,而我之前的知识来自Python(以及用于HTML解析的BeatifulSoup).

我正在使用TagSoup查看我的HTML(似乎是推荐的),并且对它的工作原理有一个基本的了解.这是我的代码的基本部分(自包含,并输出测试信息):

import System.IO
import Network.HTTP
import Text.HTML.TagSoup
import Data.List

main :: IO ()
main = do
    http <- simpleHTTP (getRequest "http://www.cbssports.com/nba/scoreboard/20130310") >>= getResponseBody
    let tags = dropWhile (~/= TagOpen "div" []) (parseTags http)
    done tags where
        done xs = case xs of
            [] -> putStrLn $ "\n"
            _ -> do
                putStrLn $ show $ head xs
                done (tail xs)
Run Code Online (Sandbox Code Playgroud)

但是,我并没有试图找到任何"div"标签.我希望以这样的格式删除标记之前的所有内容:

TagOpen "div" [("id","scores-1997830"),("class","scoreBox spanCol2")]
TagOpen "div" [("id","scores-1997831"),("class","scoreBox spanCol2 lastCol")]
Run Code Online (Sandbox Code Playgroud)

我试过把它写出来:

let tags = dropWhile (~/= TagOpen "div" [("id", "scores-[0-9]+"), …
Run Code Online (Sandbox Code Playgroud)

html regex tag-soup haskell

6
推荐指数
1
解决办法
1182
查看次数

标签 统计

haskell ×2

html ×1

pattern-matching ×1

regex ×1

tag-soup ×1