[Racket] Ferti hydroponic nutrient solver, redux.
Fix model modules.
models/crop-requirement.rkt
@@ -15,7 +15,7 @@
15
15
[get-crop-requirement-value (-> crop-requirement-or-id/c nutrient? maybe-nutrient-value?)]
16
16
[delete-crop-requirement! (-> crop-requirement-or-id/c void?)]
17
17
[average-crop-requirement-nutrient-values
18
Removed:
(-> (listof (cons/c crop-requirement? (between/c 0 100))) nutrient-value-hash/c)]))
18
Added:
(-> (hash/c crop-requirement? (between/c 0 100)) nutrient-value-hash/c)]))
19
19
20
20
(require racket/contract
21
21
db
@@ -150,8 +150,7 @@
150
150
;; Helpers
151
151
152
152
(define (average-crop-requirement-nutrient-values mix)
153
Removed:
(for/fold ([acc (hash)]) ([pair (in-list mix)])
154
Removed:
(match-define (cons crop-requirement percentage) pair)
153
Added:
(for/fold ([acc (hash)]) ([(crop-requirement percentage) (in-hash mix)])
155
154
(define weight (/ percentage 100))
156
155
(for/fold ([acc acc])
157
156
([(nutrient value) (in-hash (crop-requirement-nutrient-values crop-requirement))])
@@ -231,7 +230,7 @@
231
230
(define cr1 (get-crop-requirement #:profile requirement-profile))
232
231
(define cr2 (create-crop-requirement! "Lettuce" (hash nitrogen 100 phosphorus 30)))
233
232
234
Removed:
(define mix (list (cons cr1 60) (cons cr2 40)))
233
Added:
(define mix (hash cr1 60 cr2 40))
235
234
(define avg (average-crop-requirement-nutrient-values mix))
236
235
237
236
;; 150 * 0.6 + 100 * 0.4 = 90 + 40 = 130
models/crop-rotation.rkt
@@ -59,6 +59,7 @@
59
59
(define (residuals->requirement-proportion-hash residuals)
60
60
(for/hash ([r (in-list residuals)])
61
61
(match-define (vector requirement-id proportion) r)
62
Added:
;; TODO: Fix this N+1 query problem.
62
63
(values (get-crop-requirement #:id requirement-id) proportion)))
63
64
64
65
(define (grouped-row->crop-rotation grouped-row)
models/fertilizer-product.rkt
@@ -3,7 +3,7 @@
3
3
(provide fertilizer-product
4
4
fertilizer-product?
5
5
fertilizer-product-id
6
Removed:
(rename-out [fertilizer-product-canonical-name fertilizer-name]
6
Added:
(rename-out [fertilizer-product-canonical-name fertilizer-product-name]
7
7
[fertilizer-product-nutrient-values fertilizer-product-values]
8
8
[fertilizer-product-brand-name fertilizer-brand-name])
9
9
(contract-out