2017-04-17 130 views
0

我试图使用与字符串通过包含数字,字符串和空列表清单,递归解析和转换任何字符串到数字的名单上使用与字符串>号码>数包含字符串和数字

(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) 

但是我recieving合同VI第一个数字5(如果我使用只有字符串和空列表的tnode,则在后面的空列表上)出现olation错误。看起来好像该函数忽略了前两个条件并直接转到else语句。为什么是这样?我不认为有任何语法错误,因为其他测试过的cond函数工作正常。我不太确定问题在哪。

回答

1

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

+0

谢谢你,与周围但是空列表没有出现的数字的工作有帮助。根据需要,我得到'(5 5)'而不是'(5 5()()'的输出。 –

+0

我发现问题在于,我需要(null?inlist)的条件和(null?(car inlist))的条件,因为需要有一个最终的null值, 最终代码将在另一个答案中 –

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)))) 
     ) 
    )