用HTML内容替换字体标记
我现在正在做这个作业,但我不知道。有人能帮我吗 给定以下表示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]
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
,您需要做些什么吗信息技术