(ns clojure-sample.core (:gen-class)) (require '[clj-time.core :as t]) (require '[clj-time.format :as f]) ;; Product record (defrecord Product [id name available price]) ;; Positional constructor (def product1 (->Product "1" "T-Shirt 1" true 15.00)) ;; Map constructor (def product2 (map->Product {:id "2" :name "T-Shirt 2" :available true :price 20.00})) ;; Nested (def product3 {:id "1" :name "Product 1" :available true :sellers [{:id "1" :name "Seller 1" :stock 3}, {:id 2 :name "Seller 2" :stock 5}]}) ;; Set (def categories #{"shirts" "shoes" "belts"}) ;; List (def wishlist '(1 2)) ;; Recursion (defn factorial [value] (cond (<= value 1) 1 :else (* value (factorial (- value 1))))) (def basic-formatter (f/formatter "YYYY-MM-dd hh:mm:ss")) (defn now [] (f/unparse basic-formatter (t/now))) (defn log ([] (println (now) "No message")) ([message] (println (now) message))) (defn -main [& args] (println (:id product1)) (println (:name product2)) (println (:name (get (:sellers product3) 0))) (println (first categories)) (println wishlist) (println (factorial 5)) (log) (log "Message"))