scheme - string-append错误类型以应用错误

时间:2014-07-25 01:34:46

标签: string list scheme lisp runtime-error

我有这段代码

(lambda (symbol)
  (let*(
        (datalist (get-list symbol))
    (desc " ")
        (html "<table border=\"1\">")
        (html (string-append html "<tr><td>" (list-ref datalist 1) "</td><t\
r><td>" (list-ref datalist  2) "</td></tr>"))
        )
    (do ((p 7 (+ 7 p)))
    ((> p (-(length datalist) 2)))
      (desc (string-append desc "<tr><td>"(list-ref datalist p) "</td><td>"\
 (list-ref datalist (+ p 1))"</td></tr>"))
      )
    (set! html (string-append html desc "</table>"))
      html
    )
  )

我基本上从一个数据列表中获取一些元素并向它们添加一些html标记。但是,当我运行代码时,我得到一个错误的类型来应用错误&#34;关于desc绑定(第4行)。是什么赋予了?即使我将其更改为&#34; foo&#34;等值,我仍然会收到错误的类型错误。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

错误不在绑定中,在循环体中:

(desc (string-append desc …))

您尝试将desc视为一个程序 - 但它是一个字符串。所以基本上代码的一部分正在做与此类似的事情:

("s1" "s2")

这会导致报告错误。也许你打算这样做?

(set! desc (string-append desc …))

我会猜测你想要实施什么。 执行会注意到缩进和格式化代码有助于明确说明:

(lambda (symbol)
  (let* ((desc " ")
         (datalist (get-list symbol))
         (html (string-append "<table border=\"1\">"
                              "<tr><td>"
                              (list-ref datalist 1)
                              "</td><tr><td>"
                              (list-ref datalist  2)
                              "</td></tr>")))
    (do ((p 7 (+ 7 p)))
      ((> p (- (length datalist) 2)))
      (set! desc (string-append desc 
                                "<tr><td>"
                                (list-ref datalist p) 
                                "</td><td>"
                                (list-ref datalist (+ p 1))
                                "</td></tr>")))
    (string-append html desc "</table>")))