Categories
Clojure

Up and Running Datomic Starter

The recipe:
1. datomic-pro. Download lewat

https://my.datomic.com/downloads/pro

2. datomic console. Download at

https://my.datomic.com/downloads/console

3. MusicBrainz sample database. Download at

http://s3.amazonaws.com/mbrainz/datomic-mbrainz-backup-20130611.tar

Categories
Clojure

Dive in Clojure: Abstraksi yang Lebih Abstrak dengan Transducer!

Sudah lebih dari seminggu, saya benar-benar tertarik dengan om.next. om.next adalah react wraper untuk clojurescript. Ketika saya mengikuti tutorial om.next, ada satu baris kode yang membuat saya bingung. Saya benar-benar bingung!

(defn get-people [state key]
  (let [st @state]
    (into [] (map #(get-in st %)) (get st key))))

Saya pikir kode pada baris ke-3 salah, (map #(get-in st %)), ternyata saya yang keliru. Selama ini form dari map yang saya tahu adalah (map f data ..). Ketika buka kembali dokumentasi dari map:

Usage: (map f)
       (map f coll)
       (map f c1 c2)
       (map f c1 c2 c3)
       (map f c1 c2 c3 & colls)

Kode (map #(get-in st %)) adalah kode yang valid untuk form (map f). Ketika saya invoke kode ini me-return fungsi transducer?????

The hack is transducer?!

Categories
Clojure

Clojure ProjectEuler No. 3 – Largest Prime Factor

Ok, post lagi tentang ProjectEuler, kali ini dengan problem no. 3. Problemnya tidak lain adalah mencari faktor bilangan prima terbesar.

The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143?
Categories
Clojure

Dive in Clojure: partial

Pertamanya agak bingung dengan fungsi partial ini, tapi setelah ketemu contoh praktikalnya jadi Ngeh kenapa fungsi partial ada.

Menurut clojuredocs:

Takes a function f and fewer than the normal arguments to f, and returns a fn that takes a variable number of additional args. When called, the returned function calls f with args + additional args.

Fungsi partial digunakan ketika kita sudah tahu fungsi apa yang harus kita gunakan, tetapi argumennya belum siap.

Categories
Clojure

Clojure ProjectEuler No. 11 – The Naive Way

Problem 11 di Euler bener-bener ngeselin, ini dia problemnya:

In the 20×20 grid below, four numbers along a diagonal line have been marked in red.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

The product of these numbers is 26 × 63 × 78 × 14 = 1788696.

What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

So gimana kita bisa nemuin 4 angka yang berdekatan, baik horizontal, vertical, diagonal kiri, atau diagonal kanan?

Categories
Clojure

clojure.repl: Baca Dokumentasi di REPL

Pernah gak sih saat ngoding ngeblank, tau mau ngapain pake suatu method atau function, tapi lupa nama function-nya?? Atau parameternya yang bener itu kayak gimana? Saya mah sering kayak gitu.

So, Programing gak akan pernah lepas dari dokumentasi. Programer yang baik tahu bagaimana caranya membaca dokumentasi, google-fu atau stackoverflow.com kelamaan.

Semua bahasa pemrograman yang baik punya senjata ini, mereka menyediakan dokumentasinya. Bahkan saat ngoding sekalipun bisa langsung lihat dokumentasi.

Di Clojure, dokumentasi bisa dilihat di clojuredocs.org atau Clojure Cheatsheet.

Categories
Clojure

Clojure: Collections vs Sequences

Clojure adalah bahasa pemrograman yang memakai gaya LISP, salah satu keunggulan Clojure selain LISP adalah struktur data yang dimiliki, yaitu Collections dan Sequences. Saat bekerja dengan Clojure, banyak ekpresi dibentuk berdasarkan struktur data dari Collections dan Sequences.