如何基于给定reduce函数实现Scheme二进制列表转字符串功能
Scheme二进制列表转字符串实现修正
原代码错误点
- 给定的
reduce高阶函数要求传入3个参数:二元操作函数op、基准值base、待处理列表x,你当前的reduce调用参数数量不匹配,也没有封装正确的处理逻辑 - 直接拼接
number->string、lst、list->string的写法不符合Scheme语法,也没有实现逐个转换数字再拼接的逻辑
正确实现代码
这里提供更易理解的字符串拼接版本:
(define (binary->string lst) (reduce (lambda (num processed-str) (string-append (number->string num) processed-str)) "" lst))
逻辑说明
- 基准值设为空字符串
"",对应空输入列表的返回结果 - 二元操作函数每次将当前二进制数字转为单字符字符串,拼接到已经处理好的后半段字符串前面
- 最终reduce会遍历完整个列表,拼接出完整的二进制字符串
效果验证
调用(binary->string '(1 1 0 1 0 0))会直接返回"110100",符合要求。
可选的字符列表转换版本
如果你希望用字符列表中转的方式实现,也可以用如下写法:
(define (binary->string lst) (list->string (reduce (lambda (num char-lst) (cons (integer->char (+ (char->integer #\0) num)) char-lst)) '() lst)))
内容的提问来源于stack exchange,提问作者ivanka georgieva
相关产品推荐
相关产品推荐

