Scheme中字符串转二进制的方法

How to convert String to Binary in Scheme

所以,我 运行 遇到了这个问题,我一直在尝试编写一种将二进制数转换为 Scheme (R5RS) 中的字符串的方法,但我一直有一些。 ...问题。我和我的导师花了一个小时试图解决这个问题,但我们一直没能解决。

事实上,在我完成最后一节课时,他留下了以下内容:

    (define binary->string (lambda (lst)
                         (define str (make-string 0)) 
                         (letrec ((recurse (lambda (l)
                                             ; turn into not null
                                             (if (null? l)
                                                 (lambda ()
                                                   (set! str (string-append str (number->string (car l))))
                                                   (recurse (cdr l)))
                                                 )
                                             )
                                           )
                                  )
                           (recurse lst)
                          )
                         str)
  )

(binary->string '(0 1 0 1 0 0 1 1))

看到哪里写着“变成非空”了吗?好吧,我们在尝试将数字转换为 not null 时遇到了一些问题。我当然希望这会有所帮助。谢谢!

所以你想要这个结果?

> (binary->string '(0 1 0 1 0 0 1 1))
"01010011"

我看你已经用过了string-append and number->string, so you should also use apply and map:

(define (binary->string arg)
  (apply string-append
         (map number->string arg)))

> (binary->string '(0 1 0 1 0 0 1 1))
"01010011"

如果你也想把它转换成十进制数,用string->numberradix 2:

> (string->number "01010011" 2)
83