使用数字DrRacket Scheme替换列表的每个元组中的第一个元素

时间:2018-04-22 21:39:55

标签: list tuples scheme racket

我想采取如下列表:
    '((R.1)(R.5)(R.2)(R.4)(p.3)(t.6)(R.7))
用字母代替字母如下:

  1. - [R
  2. P

1 个答案:

答案 0 :(得分:0)

不清楚数字是否被字母替换,反之亦然,但它们都是一样的。您需要为一个元组创建一个过程:

(define (letter->number tuple)
  (cons 
   (case (car tuple)
     ((R) 'first)
     ((p) 'second)
     (else 'third))
   (cdr tuple)))


(letter->number '(R . 1)) ; ==> (first . 1)
(letter->number '(p . 1)) ; ==> (second . 1)
(letter->number '(t . 1)) ; ==> (third . 1)

使用此功能,您可以使用地图轻松修复这些列表:

(map letter->number '((R . 1) (R . 5) (R . 2) (R . 4) (p . 3) (t . 6) (R . 7)))
; ==> ((first . 1) (first . 5) (first . 2) (first . 4) (second . 3) (third . 6) (first . 7))

请注意,您的列表中存在错误。如果您不在虚线指示器的每一侧使用空格,那么Scheme将把整个事物读作符号。因此'(R . 1)是带有R1的虚线列表,但'(R.1)是一个正确的列表,其中第一个元素为r.1,空列表为其余的部分。