Scheme单词翻译器运行报错:In procedure cadr: Wrong type (expecting pair): #f
Scheme单词翻译器错误修复
错误根源在于类型不匹配:data列表中的键是符号(如hallo),但你传入的查询值是字符串(如"hallo")。assoc函数默认使用eq?进行比较,不同类型的值永远不相等,导致assoc返回#f,后续调用cadr处理#f时触发类型错误。
以下是两种可行的修复方案:
方案1:统一使用符号作为查询键
将查询列表中的字符串改为符号,让assoc能正确匹配到对应条目:
(define data '((hallo hello) (apfel apple) (welt world))) (map (lambda (i) (display (cadr (assoc i data)))) (list 'hallo 'apfel 'welt))
方案2:兼容字符串输入
如果需要保留字符串作为查询输入,可以自定义一个基于字符串比较的查找函数,将data中的符号转换为字符串后再匹配:
(define data '((hallo hello) (apfel apple) (welt world))) (define (assoc-str str lst) (cond ((null? lst) #f) ((string=? str (symbol->string (caar lst))) (car lst)) (else (assoc-str str (cdr lst))))) (map (lambda (i) (display (cadr (assoc-str i data)))) (list "hallo" "apfel" "welt"))
内容的提问来源于stack exchange,提问作者Etlam
相关产品推荐
相关产品推荐

