在Scheme中,如何仅返回包含字符串和数字组合的列表中的字符串

时间:2014-11-21 13:48:11

标签: list comparison scheme racket

我正在试图找出编码方法的方法,因此它返回包含字母和数字的列表中的字母,它应该返回列表中第一个数字的字母。例如: (up-to-first-digit '(q w c 9 5 6)) returns (q w c)到目前为止,我有“第一个”定义的函数:(define (frst a b) a)但是不能想到实现这个来将字母返回到第一个数字,尽管我不限于使用我定义的函数。有什么想法,想法?谢谢!注意:我只能使用某些预定义的谓词,就像我想keep只保留字符串一样,但它会再次返回第一个数字。

2 个答案:

答案 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)))
      '()))