This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-03-29
Channels
- # admin-announcements (1)
- # announcements (20)
- # babashka (43)
- # beginners (134)
- # calva (2)
- # clerk (7)
- # cljdoc (9)
- # clojars (8)
- # clojure (91)
- # clojure-europe (21)
- # clojure-nl (1)
- # clojure-norway (13)
- # clojure-uk (1)
- # clojurescript (5)
- # datahike (3)
- # docker (2)
- # emacs (6)
- # fulcro (7)
- # graphql (9)
- # honeysql (24)
- # improve-getting-started (5)
- # introduce-yourself (1)
- # lambdaisland (1)
- # luminus (3)
- # malli (3)
- # nbb (19)
- # off-topic (22)
- # pathom (1)
- # portal (3)
- # practicalli (1)
- # rdf (26)
- # reagent (29)
- # reitit (9)
- # shadow-cljs (15)
- # spacemacs (3)
- # sql (4)
- # tools-build (30)
- # xtdb (41)
Jeg skrev litt om teknisk prototyping, på norsk: https://play.teod.eu/tre-prinsipper-for-teknisk-prototyping/ Ser for meg at mange her kan ha gode erfaringer og meninger om hvordan man skal gå fram når man har et litt vanskelig problem man trenger å angripe!
God formiddag! Jeg har lurket her en stund, men på tide å si hei 😄 Jeg har skrevet mitt første clojure-bibliotek. Det løser et problem vi hadde i Anteo hvor vi hadde mange tall flytende rundt i systemet og det var lett å surre til enheter og konvertering. Sjekk det gjerne ut og kom med tilbakemelding! https://github.com/anteoas/broch
Oi, kult! Dette har jeg også prøvd på før (https://github.com/mentat-collective/emmy/issues/46, https://github.com/sicmutils/sicmutils/pull/213, https://github.com/teodorlu/siunit.alpha1/blob/master/src/teodorlu/siunit/alpha1.clj), uten at jeg følte at jeg helt fikk det helt til. Interessant at du "konstruerer" litt som man gjør i time-biblioteker:
(b/meters 10) ;=> #broch/quantity[10 "m"]
#broch/quantity[10 "m"] ;=> #broch/quantity[10 "m"]
(b/feet (b/meters 10)) ;=> #broch/quantity[32.8083989501 "ft"]
(b/meters (b/seconds 3)) ;=> ExceptionInfo "Cannot convert :time into :length"
tror @U017QJZ9M7W fremdeles er gira på å få enheter inn i https://github.com/mentat-collective/emmy/.Det er også mulig å definere +, *, / og - på tall med enheter (quantities) på en måte som gir mening:
(let [k 10e3
N (* :kg :m {:s -2})]
(/ (* 12000 {:kg 1 :m 1 :s -2})
k N))
;; => {:quantity 1.2, :unit {}}
her er *, +, / og - fra teodorlu.siunit.alpha1
, ikke fra clojure.core
.
Edit: ser at dere https://github.com/anteoas/broch/blob/3982e30732ca62863f260d2bbccc5b99787fc212/src/broch/core.clj#L54-L57 🙂
(defn *
([x] x)
([x y] (impl/boxed-arithmetic x y clojure.core/*))
([x y & more] (reduce * (* x y) more)))
Her er litt "bedre" eksempelbruk av mitt bibliotek: https://github.clerk.garden/teodorlu/lab/commit/133c06f530811306a4b990e230669f260f51674e/src/siunit.html
@U3X7174KS kult at du har vært inne på veldig lignende ideer! Overloading av +-*/ fungerer veldig fint. Bare litt irriterende at dette ikke er i en protocol man kunne extendet for å bruke de innebygde i clojure.core
.
I emmy er +-*/ generisk! https://github.com/mentat-collective/emmy/blob/fe0e8bb755baf677cd615ba8e69be4f7f6f3ce40/src/emmy/generic.cljc#L48-L54. Ellers anbefaler jeg kapittel 6.3.1 fra https://mitpress.mit.edu/9780262045490/software-design-for-flexibility/ av Hanson og Sussman (Sussman skrev SICP)