这是一个很长的问题......我是新加入的,所以请不要攻击我。为我的英语沟通不佳道歉。我有一些定义:
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
这是一个很长的输出,它不起作用。如何能够解决这个问题?