Beginning Student环境下列表转单个字符串的递归实现方案
Racket BSL 受限环境下列表转字符串解法
1 字符列表转单个字符串
实现思路
先递归计算字符列表的总长度,再使用BSL内置的build-string函数,按索引从字符列表中依次取出对应字符,填充生成目标字符串,全程不触发禁用函数限制。
实现代码
;; 计算列表长度 (define (list-length lst) (cond [(empty? lst) 0] [else (+ 1 (list-length (rest lst)))])) ;; 取列表第idx位元素(索引从0开始计数) (define (list-get lst idx) (cond [(= idx 0) (first lst)] [else (list-get (rest lst) (- idx 1))])) ;; 字符列表转字符串主函数 (define (char-list->string char-lst) (build-string (list-length char-lst) (lambda (i) (list-get char-lst i))))
调用示例
输入:(char-list->string (cons #\C (cons #\O (cons #\M (cons #\P (cons #\U (cons #\T (cons #\E empty))))))))
输出:"COMPUTE"
2 字符串列表转单个字符串
实现思路
先自定义函数将单个字符串转换为字符列表(避开禁用的explode),再递归拼接所有字符串对应的字符列表得到总字符列表,最后复用上面的char-list->string函数得到最终结果。
实现代码
;; 辅助函数:将字符串从索引i开始转换为字符列表 (define (string->char-list-helper s i) (cond [(= i (string-length s)) empty] [else (cons (string-ref s i) (string->char-list-helper s (+ i 1)))])) ;; 单个字符串转字符列表 (define (string->char-list s) (string->char-list-helper s 0)) ;; 字符串列表转总字符列表 (define (str-list->total-char-list str-lst) (cond [(empty? str-lst) empty] [else (append (string->char-list (first str-lst)) (str-list->total-char-list (rest str-lst)))])) ;; 字符串列表转字符串主函数 (define (str-list->string str-lst) (char-list->string (str-list->total-char-list str-lst)))
调用示例
输入:(str-list->string (list "COM" "PUT" "E"))
输出:"COMPUTE"
内容的提问来源于stack exchange,提问作者DerangedClock
相关产品推荐
相关产品推荐

