在包含字符串和数字的列表中使用string->数字

时间:2017-04-17 18:04:15

标签: scheme type-conversion racket

我试图以递归方式解析包含数字,字符串和空列表的列表,并使用string-> number

将任何字符串转换为数字
(define tnode '(5 "5" () ()))

使用函数

(define (test funct inlist)
    (cond((null? inlist) '())
         ((number? inlist) ((cons (car inlist) (test funct (cdr inlist)))))
         (else (cons (funct (car inlist)) (test funct (cdr inlist))))
         )
    )

作为

(test string->number tnode)

但是我收到第一个数字5上的合同违规错误(如果我使用仅包含字符串和空列表的tnode,则在后面的空列表上)。似乎函数忽略了前两个条件并直接进入else语句。为什么是这样?我不相信有任何语法错误,因为我测试的其他cond函数已经正常工作。我不太清楚问题是什么。

2 个答案:

答案 0 :(得分:1)

inlist是整个列表;你想要检查它的第一个元素,就像你处理结果中的第一个元素一样。

答案 1 :(得分:0)

给我所需输出的函数代码如下

(define (test funct inlist)
    (cond((null? inlist) '())
         ((null? (car inlist)) (cons '() (test funct (cdr inlist))))
         ((number? (car inlist)) (cons (car inlist) (test funct (cdr inlist))))
         (else (cons (funct (car inlist)) (test funct (cdr inlist))))
         )
    )