This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2019-08-16
Channels
- # announcements (3)
- # beginners (104)
- # boot (18)
- # calva (1)
- # cider (43)
- # cljs-dev (45)
- # cljsrn (2)
- # clojure (29)
- # clojure-dev (10)
- # clojure-europe (2)
- # clojure-italy (117)
- # clojure-nl (17)
- # clojure-spec (56)
- # clojure-uk (41)
- # clojuredesign-podcast (12)
- # clojurescript (35)
- # community-development (6)
- # cursive (27)
- # datomic (12)
- # emacs (9)
- # fulcro (6)
- # graalvm (52)
- # instaparse (6)
- # klipse (3)
- # leiningen (11)
- # lumo (1)
- # off-topic (16)
- # pathom (31)
- # re-frame (10)
- # reagent (26)
- # reitit (3)
- # shadow-cljs (67)
- # sql (4)
- # tools-deps (1)
All square sizes edition!
(defn game-over? [player board]
(let [size (count board)
idxs (range size)]
(->> [[x idx] [idx y] [idx idx] [idx (- (dec size) idx)]]
(map (fn [[x y]] ((board x) y)))
(for [x idxs y idxs idx idxs])
(apply mapcat list)
(partition size)
(some #(apply = player %)))))
(game-over? :x [[:x :o :x :x :o :o :o]
[:x :x :o :o :x :o :o]
[:o :x :x :x :o :x :o]
[:x :x :o :x :o :o :o]
[:x :o :x :x :x :o :x]
[:o :x :x :x :o :x :o]
[:o :x :x :x :o :x :x]])
;; true
mi puoi spiegare grosso modo cosa fa questa funzione? 🙂 Devo ancora abituarmi al nome delle variabili così corto, mi perdo ancora troppo facilmente
qui soprattutto non capisco:
(->> [[x idx] [idx y] [idx idx] [idx (- (dec size) idx)]]
(map (fn [[x y]] ((board x) y)))
(for [x idxs y idxs idx idxs])
Si e’ un certo trick. I local bindings x,y,idx sono definiti nella for
comprehension ma siccome ->>
inverte l’ordine, appaiono prima di essere dichiarati
(defn game-over? [player board]
(let [size (count board)
idxs (range size)]
;; How x,y coordinates relates to items in:
;; row, column, diagonal, inverse diagonal respectively.
(->> [[x idx] [idx y] [idx idx] [idx (- (dec size) idx)]]
;; let's map over each of the pairs above.
(map (fn [[x y]] ((board x) y)))
;; big trick here, as x,y,idx used above are actually locally bound by
;; this for. But because ->> is a macro, they are not evaluated above
;; and they don't throw errors.
(for [x idxs y idxs idx idxs])
;; the for comprehension creates reading of the input board for
;; lines, columns and 2 diagonals
(apply mapcat list)
;; they need to be grouped by the size of the square
(partition size)
;; and then check if they are all the same.
(some #(apply = player %)))))
oh clojure black magic qui 🙂
ottimo ottimo, ogni giorno si imparano cose nuove 👍
siamo al limite del ragionevole, forse un pelo di la’, quindi se in code review mi ringhiano contro li capisco
Volevo usare set perche’ avevo piu’ di un predicato da valutare. Il modo corretto e’ (every? (some-fn false? #{:a}) [false false :a])
=> true
forse più idiomatico così:
(every? (partial contains? #{false :a}) [false false :a]) ;; -> true
o (every? (zipmap #{false :a} (repeat true)) [false false :a])
che almeno evidenzia i valori
@bronsa ok. L’unico problema che potrei avere e’ nil nell’input, ma sembra andare: (every? (some-fn false? #{:a}) [false false :a nil])
=> false
giornissimo
user=> (#{false :a} :b :nope)
Execution error (ArityException) at user/eval150 (REPL:1).
Wrong number of args (2) passed to: clojure.lang.PersistentHashSet
user=> ({false 1 :a 1} :b :nope)
:nope
prima di aprire una issue su jira stavo giocherellando sul codice e ho visto che ATransientSet
implementa la arity-2
Toh qualcuno lo usa ancora il mio piccolo sito 😃
Salve a tutti! E' da tempo che mi sto documentando su clojure... ora vorrei finalmente cominciare a creare un progetto. Voglio sviluppare un semplice ecommerce. Backend in clojure e frontend in Vue.js... Ora il mio dilemma è questo: che set di librerie devo usare? Mi sembra chiaro che debba usare compojure e ring. Credo di aver capito che dovrò sviluppare una funzione "middleware" che si occuperà di filtrare i routes per parsare i JWT. Ma già qui mi perdo... Quale libreria usare? Poi... userò mongodb e quindi (molto probabilmente) monger... Già mi sono rincoglionito a studiare emacs e ora sta accadendo lo stesso con l'init del mio progetto. C'è qualche risorsa web che mi possa dare un incipit, indicazione o qualsiasi cosa che mi tolga da questa sensazione di "ubriacatura perenne".
A sentimento sò che tutte queste difficoltà saranno ripagate ma lo giuro, poche volte mi sono sentito così smarrito!!!
Come primo progetto, ti direi anch'io luminus
e' gia' una sorta di "framework" nel senso che ci sono gia' un po' di librerie scelte per te
Luminus x me puo andare bene, altrimenti puoi fare qualocosa di piu minimal dove scegli te ogni componente
ma dipende dal tuo grado di esperienza e tempo che vuoi dedicarci. credo che per avere un feeling e incominciare luminus vadi bene. poi io passerei a Ring + altro
x emacs se ti serve una guida su clojure puoi guardare qua: https://www.braveclojure.com/basic-emacs/
io per app fullstack ho usato lein new figwheel-main app -- --reagent +deps
però sono mega noob quindi non so quanto valido sia come consiglio 🙂
e.g le queue e altre cose clojure usa java, certo puoi usare altri lib ma ci sono tante progetti che usano Java, quindi ti sara utile 😁
tempof fa avevo aperto un topic a riguardo, https://clojureverse.org/t/a-minimalstic-and-hard-way-approach-to-clojurescript-app/4603
a meno che non hai delle constraint particolari, ma clojurescript e abbastanza pratico x quello 😁
Concordo. E' nella lista delle cose da fare. Per ora ho preso un pò di dimestichezza con Emacs e cider (spacemacs), poi mi sono fatto un pò di 4clojure. Per cljs aspetto di avere un pò più di confidenza lato backend.
Penso che comincerò con il template leiningen più semplice.. e man mano ci aggiungo pezzi. Per ora nella lista c'è: compojure, ring e monger
sembra ok cmq se un pet project x imparare puoi fare anque quello. Ma cioe x me, se vuoi imparare il backend e basta, allora personalmente io farei un progetto solo backend
penso che luminus x imparare e un bel progetto. ovviamente x un cliente/legacy code e qualcosa che va preso piu seriamente e considerato molto meglio 😁 cioe ci sono troppe lib etc
consiglio spacemacs per chi come me non è un emacs power user e non riesce a dimenticarsi dei vim key bindings 🙂
domanda serale, se uno volesse farsi un grafo delle chiamate delle funzioni in un progetto clojure? Ho provato vari plugin che per lein
ma pare che nessuno di questi sia aggiornato