Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
用HTML内容替换字体标记_Html_Haskell - Fatal编程技术网

用HTML内容替换字体标记

用HTML内容替换字体标记,html,haskell,Html,Haskell,我现在正在做这个作业,但我不知道。有人能帮我吗 给定以下表示HTML的数据类型: type HTML = [HTML_element] data HTML_element = HTML_text String | HTML_font Font_tag HTML | HTML_p HTML | HTML_ul [HTML] | HTML_ol [HTML]

我现在正在做这个作业,但我不知道。有人能帮我吗

给定以下表示HTML的数据类型:

type HTML = [HTML_element]
data HTML_element = HTML_text String
                  | HTML_font Font_tag HTML
                  | HTML_p HTML
                  | HTML_ul [HTML]
                  | HTML_ol [HTML]

data Font_tag = Font_size Int
              | Font_face String
              | Font_color Font_color

data Font_color = Colour_name String
                | Hex Int
                | RGB Int Int Int
编写一个Haskell函数:

strip_font_tags :: HTML -> HTML

删除所有字体标记,用HTML内容替换它们。

好吧,简单的方法是用另一个
HTML\u元素替换
,这是一个保留结构的转换,您可能会稍微更改数据,编写一个
Functor
实例,然后只需使用
fmap
——您的映射是“如果是
HTML\u font\ux
,则返回,例如
HTML\u p x
;如果不是,则按原样返回”

这是用SYB表示的:

{-# LANGUAGE DeriveDataTypeable #-}
import Data.Generics

data Element
    = Text String
    | Font [Element]
    | Para [Element]
    deriving (Show, Typeable, Data)

-- replace Font with Para
replace' :: Element -> Element
replace' (Font x) = Para x
replace' x = x

-- top-level transformation
-- replace this with manual recursion and you're set
replace :: Element -> Element
replace = everywhere (mkT replace')

example =
    Para [
        Text "1",
        Font [
            Text "2.1",
            Para [
                Text "2.2.1",
                Font [Text "2.2.2"]
            ]
        ],
        Text "3"
    ] 
在GHCi中:

[*Main]
> replace example
Loading package syb-0.3.6.1 ... linking ... done.
Para [Text "1",Para [Text "2.1",Para [Text "2.2.1",Para [Text "2.2.2"]]],Text "3"]
it :: Element

如果您想完全消除这些元素,您可以将所有内容映射到列表中,然后对它们进行合并。试着自己去弄清楚。

好吧,简单的方法是用另一个
HTML\u元素替换
HTML\u元素
——这是一个保留结构的转换,您可以稍微更改数据,编写一个
函子
实例,然后只需使用
fmap
——您的映射是“如果是
HTML\u font\ux
,则返回例如
HTML\u p x
;如果没有,请按原样返回”

这是用SYB表示的:

{-# LANGUAGE DeriveDataTypeable #-}
import Data.Generics

data Element
    = Text String
    | Font [Element]
    | Para [Element]
    deriving (Show, Typeable, Data)

-- replace Font with Para
replace' :: Element -> Element
replace' (Font x) = Para x
replace' x = x

-- top-level transformation
-- replace this with manual recursion and you're set
replace :: Element -> Element
replace = everywhere (mkT replace')

example =
    Para [
        Text "1",
        Font [
            Text "2.1",
            Para [
                Text "2.2.1",
                Font [Text "2.2.2"]
            ]
        ],
        Text "3"
    ] 
在GHCi中:

[*Main]
> replace example
Loading package syb-0.3.6.1 ... linking ... done.
Para [Text "1",Para [Text "2.1",Para [Text "2.2.1",Para [Text "2.2.2"]]],Text "3"]
it :: Element

如果您想完全消除这些元素,您可以将所有内容映射到列表中,然后将它们合并。试着自己解决它。

我想这里的其他人都忽略了练习的要点。下面是我在解释问题后的思考过程;也许这可以对您有所指导

我想考虑一次只操作一个
HTML\u元素
,所以我想要一个在某个点上具有类型
HTML\u元素->?
的函数;弄清楚
可能是什么将是一个巨大的第一步。第一个尝试是为
选择
HTML\u元素
,但这并不奏效,因为字体标记的内容是
HTML
,而不是
HTML\u元素
.Hm.
HTML
又是什么呢?啊,是的,
type HTML=[HTML\u元素]
!所以,实际上,我可以在每种情况下返回
HTML
;在非字体的情况下,我可以将单个元素包装在一个单独的列表中


嗯,但现在怎么办?我想知道我已经写了每元素函数…

我想这里的其他人都没有理解这个练习的要点。这是我在解释问题后的思考过程;也许这可以给你一些指导

我想考虑一次只操作一个
HTML\u元素
,所以我想要一个在某个点上具有类型
HTML\u元素->?
的函数;弄清楚
可能是什么将是一个巨大的第一步。第一个尝试是为
选择
HTML\u元素
,但这并不奏效,因为字体标记的内容是
HTML
,而不是
HTML\u元素
.Hm.
HTML
又是什么呢?啊,是的,
type HTML=[HTML\u元素]
!所以,实际上,我可以在每种情况下返回
HTML
;在非字体的情况下,我可以将单个元素包装在一个单独的列表中


嗯,但是现在怎么办?我想知道我已经写了每个元素的函数…

你在写函数时遇到了什么困难?如果你有一个
HTML\u元素
,例如
HTML\u字体标记HTML\u内容
,你如何用它的HTML内容替换它?如果你有一个
HTML\u元素
,那不是
HTML\u font
,您需要对它做些什么吗?您在编写函数时遇到了什么困难?如果您有一个
HTML\u元素
,例如
HTML\u font\u标记HTML\u内容
,您如何用它的HTML内容替换它?如果您有一个
HTML\u元素
,它不是
HTML\u font
,您需要做些什么吗信息技术