2015-05-20 60 views
-1

输入列表中的唯一具体内容:如何获得在球拍

'(("may 001" 75 72) 
    ("may 002" 75 75) 
    ("may 003" 70 73) 
    ("june 101" 55 55) 
    ("june 104" 55 54) 
    ("aug 201" 220 220)) 

所需的输出:

'(("may 001" 75 72) ("may 002" 75 75) ("may 003" 70 73)) 

如何实现这一目标?我只想要may条款。

+0

显示所需的输出是很重要的,但我认为您还需要显示原始*输入*。 –

+0

输出=>原始输出 – KLMM

+0

是的,我看到你正在显示*实际*输出和*所需*输出。这是好事。但是,输入是什么?生产它的功能是什么?原始输入是100个元素的列表吗?它是如何减少到6个元素的列表?您没有向我们展示整个问题,并且您没有提供任何有错误的代码等。 –

回答

1

基于它们的值获取特定元素的“正常”方式是使用带有合适谓词的filter。沿着这些线路

东西:

(define (may? str) 
    (string=? "may" (substring str 0 3))) 

(define (only-may ls) 
    (filter (lambda (x) (may? (car x))) ls)) 
0

为了有用,我们可能需要一个函数,需要一个月的名称和记录列表,并返回匹配的记录列表:

#lang racket 

;; string ListOf(ListOf(String Int Int)) -> ListOf(ListOf(String Int Int)) 
(define (get-month target-month list-of-record) 

    ;; ListOf(String Int Int) -> Boolean 
    (define (record-matches? record) 
    (regexp-match target-month (first record))) 
    (filter record-matches? list-of-record)) 

然后我们就可以在查询,如使用它:

"scratch.rkt"> (get-month "may" 
          '(("may 001" 75 72) 
          ("may 002" 75 75) 
          ("may 003" 70 73) 
          ("june 101" 55 55) 
          ("june 104" 55 54) 
          ("aug 201" 220 220))) 
'(("may 001" 75 72) ("may 002" 75 75) ("may 003" 70 73)) 
"scratch.rkt"> (get-month "april" 
          '(("may 001" 75 72) 
          ("may 002" 75 75) 
          ("may 003" 70 73) 
          ("june 101" 55 55) 
          ("june 104" 55 54) 
          ("aug 201" 220 220))) 
'()