bat/tests/syntax-tests/source/Clojure/test.clj

59 lines
1.5 KiB
Clojure

(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"))