This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2019-04-29
Channels
- # announcements (4)
- # architecture (1)
- # beginners (113)
- # boot (17)
- # calva (40)
- # cider (9)
- # clara (1)
- # cljs-dev (21)
- # cljsrn (21)
- # clojure (47)
- # clojure-dev (8)
- # clojure-europe (2)
- # clojure-italy (46)
- # clojure-nl (10)
- # clojure-spec (1)
- # clojure-turkiye (1)
- # clojure-uk (46)
- # clojurescript (102)
- # core-async (21)
- # cursive (35)
- # data-science (1)
- # datomic (7)
- # emacs (2)
- # graphql (1)
- # lumo (15)
- # nrepl (4)
- # nyc (1)
- # off-topic (5)
- # overtone (3)
- # pathom (10)
- # quil (6)
- # re-frame (30)
- # reagent (7)
- # reitit (33)
- # rewrite-clj (1)
- # shadow-cljs (37)
- # spacemacs (73)
- # test-check (3)
- # testing (2)
- # vim (59)
Interessante, sto lavorando anche io a roba SAT e CDCL 😄
comunque, dopo un po’ di transformazioni per approssimare FOL a proprositional logic, arriva ad usare gli stessi algoritmi
mah non aspettarti chissache`, e` piu` per imparare a scrivere un CDCL solver che per altro
ah, trasformare in quel senso, si`, essendo CDCL un'"estensione" di DPLL, lavora in CNF anche lui
qui al lavoro sono piu’ interessato alle transformazioni che altro, ed abbiamo obiettivi diversi da smt solving o ATP. Quindi parto da basi simili poi divergo.
trasformazioni della logica in input in modo che risponda a certi requisiti (forme normali che non sono CNF ma altro)
@nilrecurring anche tu per lavoro o per diletto?
Diletto anche per me 🙂
domandina del lunedì:
E’ possibile secondo voi riscrivere questa funzione usando recur
anzichè la chiamata ricorsiva:
(defn walk [s sea-level valleys]
(if (seq s)
(let [step (first s)
new-sea-level (+ step sea-level)]
(if (and (= new-sea-level 0) (= step 1))
(walk (rest s) new-sea-level (inc valleys))
(walk (rest s) new-sea-level valleys)))
valleys))
Parrebbe di si’:
(defn walk [s sea-level valleys]
(if (seq s)
(let [step (first s)
new-sea-level (+ step sea-level)]
(if (and (= new-sea-level 0) (= step 1))
(recur (rest s) new-sea-level (inc valleys))
(recur (rest s) new-sea-level valleys)))
valleys))
hmm recur non deve essere sempre l’ “ultima istruzione”? :thinking_face:
Lo e’ :) non ti far confondere dagli if. Quello che importa e’ che se si arriva ad un recur
, in quel momento nel codice, non c’e’ altra istruzione da eseguire nello stack corrente dopo il salto ricorsivo. Il risultato di recur
puo’ essere “sostituito” nell stack corrente con il valore ritornato.
ok ok e come la mettiamo con il return di valleys alla fine? non è un’istruzione che viene dopo il recur?
sintatticamente si’, ma logicamente no. Per arrivare a ritornare “valleys” nello stack corrente, non devi passare per un recur
fortunatamente, recur
ti dice se sei in tail-call o no. Quindi la cosa piu’ semplice a volte e’ metterlo e vedere se tira un’eccezione
sìsì è che ero così convinto di non poterlo usare che non ci avevo neanche provato 😄