【问题标题】:DrRacket - Using lambda to produce list that has the same elementDrRacket - 使用 lambda 生成具有相同元素的列表
【发布时间】:2020-03-12 19:03:47
【问题描述】:

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

例如:

(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"))))

然后

(same-country alist "YUL") => (list "YUL" "YVR" "YWG" "YYZ")

有人可以告诉我如何解决这个问题/给我一个模板吗?我不允许在这个问题中使用任何命名的辅助函数,只有lambda...我知道如何在使用显式递归时做到这一点,但我对抽象列表函数的理解不够好

【问题讨论】:

标签: racket


【解决方案1】:

第 3 版

; 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")

【讨论】:

  • 感谢您的回答!!但是,当我运行第一个测试时,函数本身会产生 '() 而不是预期的结果......我不知道为什么
猜你喜欢
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多