方案:如何将字符列表转换为字符串

Scheme: How to convert a charlist to a string

我很难过。我正在尝试将 charlist 转换回字符串,但它一直失败:这很愚蠢,因为当我将一个函数的结果粘贴到另一个函数时,它工作得很好,但如果我在函数内部执行它,它就会失败...

示例: 这有效

(delete" h ell o ") outputs: '(#\h #\e #\l #\l #\o) (convertToString '(#\h #\e #\l #\l #\o)) outputs: "hello"

但这不起作用,如果在删除中调用 conertToString,就会发生这种情况

(delete" hell o") outputs:. . list->string: contract violation expected: (listof char?) given: '(#\l . "o")

(define deleteCh;driver
  (lambda (s)
    (delete(string->list s))))

(define delete 
  (lambda (input)
    (cond
      [(null? input) input]
      [(equal? (car input) #\space)  (delete (cdr input))]
      [else (convertToString (cons (car input) (delete (cdr input))))])));this works without convertToString 

(define convertToString
  (lambda (charList)
    (list->string charList)))

您的问题出在 delete 上。对于每个不是 space 的字符,您对结果执行 convertToString。因此对于字符串 "abc" 它将做

(convertToString (cons #\a (convertToString (cons #\b (convertToString (cons #\c '()))))))

提示.. 你需要做 convertToStringlist->string 的有趣包装),结果在 deleteCh 而不是每个子结果中。