方案:如何将字符列表转换为字符串
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 '()))))))
提示.. 你需要做 convertToString
(list->string
的有趣包装),结果在 deleteCh
而不是每个子结果中。
我很难过。我正在尝试将 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 '()))))))
提示.. 你需要做 convertToString
(list->string
的有趣包装),结果在 deleteCh
而不是每个子结果中。