DrRacket-使用lambda生成具有相同元素的列表

DrRacket-使用lambda生成具有相同元素的列表,racket,Racket,我是个新手,最近开始学习抽象列表函数。 我必须编写一个函数(同一国家/地区机场代码),该函数使用机场列表机场,以及一个代表机场的三字母代码。该函数生成与给定机场具有相同国家/地区的所有机场代码的列表,并按字母升序排序。 如果代码不在关联列表中,函数将生成空代码 例如: (define alist (list (list "YYZ" (list "Toronto" "Canada")) (list "YWG" (list "Winnipeg" "Canada

我是个新手,最近开始学习抽象列表函数。 我必须编写一个函数
(同一国家/地区机场代码)
,该函数使用机场列表
机场
,以及一个代表机场的三字母代码。该函数生成与给定机场具有相同国家/地区的所有机场代码的列表,并按字母升序排序。 如果代码不在关联列表中,函数将生成空代码

例如:

(define alist (list (list "YYZ" (list "Toronto" "Canada"))
                    (list "YWG" (list "Winnipeg" "Canada"))
                    (list "BGO" (list "Bergen" "Norway"))
                    (list "TRF" (list "Sandefjord" "Norway"))
                    (list "YUL" (list "Montreal" "Canada"))
                    (list "LHR" (list "London" "England"))
                    (list "YVR" (list "Vancouver" "Canada"))))
然后

有人能告诉我如何解决这个问题/给我一个模板吗?我不允许在这个问题中使用任何命名的helper函数,只有
lambda
…我知道如何在使用显式递归时使用它,但我对抽象列表函数的理解还不够透彻

; please tell us which language you use (in front of code)
; please take effort before adding comment
; language:intermediate student with lambda
(define same-country-v2
  (λ (airport-ls airport-name)
    ((λ (ls name1 name2)
       ; result
       (sort
        (map (λ (p) (first p))
             (filter (λ (x)
                       (or (equal? name1 (first (second x)))
                           (equal? name2 (second (second x)))))
                     ls))
        string<=?))
     airport-ls
     ; city name
     (first ((λ (airports airport-name) (second (first (filter (λ (x) (equal? (first x) airport-name)) airports)))) airport-ls airport-name))
     (second ((λ (airports airport-name) (second (first (filter (λ (x) (equal? (first x) airport-name)) airports)))) airport-ls airport-name)))))

;;; TEST
(same-country-v2 airports "YUL")
(same-country-v2 airports "BGO")

;请告诉我们您使用哪种语言(在代码前面)
; 请在添加评论之前努力
; 语言:有lambda的中级学生
(定义相同的国家/地区)
(λ(机场名称)
((λ(ls name1 name2)
;结果
(分类
(map(λ(p)(第一个p))
(滤波器(λ(x)
(或(等于名称1(第一个(第二个x)))
(相等?名称2(第二个(第二个x‘‘‘)’))
ls))

STRING谢谢您的回答!!但是当我运行第一个测试时,函数本身会产生
”()
,而不是预期的结果…我不知道为什么
; please tell us which language you use (in front of code)
; please take effort before adding comment
; language:intermediate student with lambda
(define same-country-v2
  (λ (airport-ls airport-name)
    ((λ (ls name1 name2)
       ; result
       (sort
        (map (λ (p) (first p))
             (filter (λ (x)
                       (or (equal? name1 (first (second x)))
                           (equal? name2 (second (second x)))))
                     ls))
        string<=?))
     airport-ls
     ; city name
     (first ((λ (airports airport-name) (second (first (filter (λ (x) (equal? (first x) airport-name)) airports)))) airport-ls airport-name))
     (second ((λ (airports airport-name) (second (first (filter (λ (x) (equal? (first x) airport-name)) airports)))) airport-ls airport-name)))))

;;; TEST
(same-country-v2 airports "YUL")
(same-country-v2 airports "BGO")