如何在球拍中仅获取列表的特定元素
How to get only specific elements of list in racket
输入:
'(("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
项。
根据值获取特定元素的 "normal" 方法是使用 filter
和合适的谓词。
大致如下:
(define (may? str)
(string=? "may" (substring str 0 3)))
(define (only-may ls)
(filter (lambda (x) (may? (car x))) ls))
为了有用,我们可能需要一个函数,该函数采用月份名称和记录列表以及 returns 匹配记录列表:
#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)))
'()
输入:
'(("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
项。
根据值获取特定元素的 "normal" 方法是使用 filter
和合适的谓词。
大致如下:
(define (may? str)
(string=? "may" (substring str 0 3)))
(define (only-may ls)
(filter (lambda (x) (may? (car x))) ls))
为了有用,我们可能需要一个函数,该函数采用月份名称和记录列表以及 returns 匹配记录列表:
#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)))
'()