1

私は自分で 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読みやすさのためにこれを改善できますか?ありがとうございました。

4

2 に答える 2

3

単独でeliminate-exp実装できます:filter

(define (eliminate-exp ua lot)
  (define (price< toy) (< (ir-price toy) ua))
  (filter price< lot))
于 2011-01-05T05:30:12.470 に答える
1

build-list とは何か、または何をするのかはわかりませんが、確かにできることは次のとおりです。

(lambda (x) ua)

それ以外の:

(local ((define (f x) ua)) f)
于 2011-01-05T04:47:38.807 に答える