私は自分で HtDP の演習 21.2.3を実行していますが、これがさまざまな関数の慣用的な使用法であるかどうか疑問に思っていました。これは私がこれまでに持っているものです:
(define-struct ir (name price))
(define list-of-toys (list
(make-ir 'doll 10)
(make-ir 'robot 15)
(make-ir 'ty 21)
(make-ir 'cube 9)))
;; helper function
(define (price< p toy)
(cond
[(< (ir-price toy) p) toy]
[else empty]))
(define (eliminate-exp ua lot)
(cond
[(empty? lot) empty]
[else
(filter ir? (map price< (build-list (length lot)
(local ((define (f x) ua)) f)) lot))]))
私の初心者の目には、同じ長さの2つのリストが必要なbuild-list
ため、ローカル関数を定義して機能させる必要があるため、かなり醜いように見えます。map
読みやすさのためにこれを改善できますか?ありがとうございました。