我正在试图找出编码方法的方法,因此它返回包含字母和数字的列表中的字母,它应该返回列表中第一个数字的字母。例如:
(up-to-first-digit '(q w c 9 5 6)) returns (q w c)
到目前为止,我有“第一个”定义的函数:(define (frst a b) a)
但是不能想到实现这个来将字母返回到第一个数字,尽管我不限于使用我定义的函数。有什么想法,想法?谢谢!注意:我只能使用某些预定义的谓词,就像我想keep
只保留字符串一样,但它会再次返回第一个数字。
答案 0 :(得分:3)
(define (take-while p l)
(let loop ((o '()) (l l))
(if (and (not (null? l)) (p (car l)))
(loop (cons (car l) o) (cdr l))
(reverse o))))
(define (up-to-first-digit l)
(take-while (lambda (x) (not (number? x))) l))
(up-to-first-digit '(q w c 9 5 6)) ;=> (q w c)
答案 1 :(得分:2)
关于术语的一句话:你真正想要的是符号,而不是字母; - )
(define (first-syms x)
(if (and (pair? x) (symbol? (car x)))
(cons (car x) (first-syms (cdr x)))
'()))