如何解决如何从方案,球拍中的列表制作HTML
这是一个很长的问题...我是新加入的,所以请不要攻击我。很抱歉我的英语沟通不好。我有一些定义:
HTML(H)是其中之一
-
Str
-
Tag
标签是
-
(cons Sym (listof H))
我想使用相互递归,使HTML成为真正的HTML代码。例如,
(list 'html (list 'head (list 'title "Hi")) (list 'body (list 'h1 "Welcome") "Text"))
变成:
"<html><head><title>Hi</title></head><body><h1>Welcome</h1>Text</body></html>"
这适用于任何列表或字符串。有将其转换为HTML的规则:
- 字符串不需要转换为HTML。
- 每个标记(来自定义)以
<tag>
开头,以</tag>
结尾。所以<html>
和</html>
。
如果他们输入字符串“ Hello”,则它不会转换任何内容。我在这里写了代码,但是没有用...
(define (html->string html)
(cond [(string? html) html]
[else (append (list "<" (first html) ">") (change-tag (rest html)) (list "</" (first html) ">"))]))
(define (change-tag lst)
(cond [(empty? lst) empty]
[else (append (html->string (list (first lst)))
(html->string (list (rest lst))))]))
如果我输入类似的内容:
(list 'html (list 'head (list 'title "Hi")) (list 'body (list 'h1 "Welcome") "Text"))
然后它给了我
(list "<" 'html ">" "<" (list 'head (list 'title "Hi")) ">" "</" (list 'head (list 'title "Hi")) ">" "<" (list (list 'body (list 'h1 "Welcome").....etc etc
这是非常长的输出,它不起作用。如何解决这个问题?
解决方法
您有正确的想法,但建议的解决方案仍然存在三个主要问题:
- 输出将是 string ,而不是 list ,因此我们必须在递归步骤中附加字符串,并在基本情况下返回字符串。
- 如果要将符号与其他字符串连接起来,则必须将符号显式转换为字符串。
- 最后但并非最不重要的一点:您遗漏了一些基本情况,这些对于编写正确的解决方案是必不可少的:如果给定的html是空列表,应该怎么办?如果列表中的第一个元素不是符号而是另一个列表,该怎么办?
这将起作用,请仔细查看已更改的内容:
(define html
(list 'html
(list 'head
(list 'title "Hi"))
(list 'body
(list 'h1 "Welcome")
"Text")))
(html->string html)
=> "<html><head><title>Hi</title></head><body><h1>Welcome</h1>Text</body></html>"
它按预期工作:
{{1}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。