개발) 저는 요즘 틈틈이 clojure를 공부하고 있습니다
M

Lv.1 massei85 (175.♡.138.140)

2024년 12월 30일 PM 08:25 · 수정됨(22:37)

조회 2,077 공감 0

일부러 업무에 상관없는 놈을 살펴보자 해서 Lisp 방언들 중에 찾아보다가 JVM 위에서 돌아가는 Clojure를 골라보았습니다

Lisp은 소싯적에 MIT Scheme이나 Emacs Lisp 살짝 다뤄본게 다였지만 그래도 아무튼 다같은 Lisp이라 적응하는데 도움이 되었습니다

core.async나 core.logic 같은 것도 재미지고 무엇보다 강력한 매크로 기능 탐구하느라 시간 훌쩍 가네요


다만 마이너한 언어다보니 주변에 의견 나누며 공부할 사람이 적어서 아쉽습니다

한국 클로저 사용자 모임 밋업이 종종 열리는것 같은데 그런데 나가볼 레벨은 아직 아닌거 같고

내년에 좀 기웃거려봐야겠습니다

현재는 유튜브, 특히 언어 창시자인 리치 히키 아재 영상 참조 많이 하고 있네요

댓글 (13)

  • 아스파라거스

    아스파라거스 Lv.1

    24.12.30 · 125.♡.122.95

    클로저 재밌죠.. pipe 로 함수 합성하면 그렇게 이뻐보이더라고요 ㅋㅋ
  • M

    massei85 Lv.1 → 아스파라거스 작성자

    24.12.30 · 175.♡.138.140

    같은 기능이더라도 최대한 멋드러지게(?) 조합하는 재미가 쏠쏠합니다 ㅋㅋ
  • 사자바람연꽃

    사자바람연꽃 Lv.1

    24.12.30 · 221.♡.34.113

    사용자 적은 언어는 프래그래밍의 기본인
    복사 붙여넣기가 힘듭니다.

    {emo:onion-005.gif:100}
  • M

    massei85 Lv.1 → 사자바람연꽃 작성자

    24.12.30 · 175.♡.138.140

    이놈은 괄호 지옥 때문에 물리적으로도(?) 복붙이 힘들더군요 ㅋㅋ
  • 트라팔가야

    트라팔가야 Lv.1

    24.12.30 · 58.♡.217.6

    프로그래밍이 간단히 되는 건가ㅜ보네요

    (ns dijkstra-example.core
    (:require [clojure.set :as set]))

    (defn dijkstra [graph start]
    (let [vertices (keys graph)
    ;; Initialize distances map, start with 0 for `start` and infinity for others
    distances (reduce (fn [dist v]
    (assoc dist v (if (= v start) 0 Double/POSITIVE_INFINITY)))
    {}
    vertices)
    ;; Initialize the previous map for tracking the shortest path
    previous {}
    ;; Set of unvisited nodes
    unvisited (set vertices)]
    (loop [distances distances
    previous previous
    unvisited unvisited]
    (if (empty? unvisited)
    {:distances distances :previous previous}
    (let [;; Get the vertex with the smallest distance in the unvisited set
    current (apply min-key distances (filter unvisited (keys distances)))
    ;; Get all neighbors of the current node
    neighbors (graph current)]
    ;; Update distances for each neighbor
    (let [distances (reduce (fn [dists [neighbor weight]]
    (let [alt (+ (distances current) weight)]
    (if (< alt (distances neighbor))
    (assoc dists neighbor alt)
    dists)))
    distances
    neighbors)
    ;; Update the previous node for each neighbor
    previous (reduce (fn [prev [neighbor weight]]
    (let [alt (+ (distances current) weight)]
    (if (< alt (distances neighbor))
    (assoc prev neighbor current)
    prev)))
    previous
    neighbors)]
    ;; Mark the current node as visited
    (recur distances previous (disj unvisited current))))))))

    ;; Example graph
    (def graph
    {:A [[:B 1] [:C 4]]
    :B [[:C 2] [:D 6]]
    :C [[:D 3]]
    :D []})

    ;; Example usage
    (def result (dijkstra graph :A))
    (println "Distances:" (:distances result))
    (println "Previous:" (:previous result))
  • M

    massei85 Lv.1 → 트라팔가야 작성자

    24.12.30 · 175.♡.138.140

    아 저도 입문 며칠 후에 바로 다익스트라랑 A*부터 해봤었는데 반갑네요 ㅋㅋㅋ
  • 김재귀

    김재귀 Lv.1

    24.12.30 · 123.♡.204.82

    재미있고 알흠다운 괄호월드.. 스킴은 마법사책 보셨나본데 그럼 엥간한건 다 아시는구먼요
    클로저리안 slack서버에 #clojure-korea 채널 오셔서 모르시는거 물어보시면 좋아하실?겁니다 ㅎㅎ
  • M

    massei85 Lv.1 → 김재귀 작성자

    24.12.30 · 175.♡.138.140

    리습 입문자의 상당수가 sicp 때문에 입문한 경우가 많을거라 생각합니다 ㅋㅋ 그나저나 재귀가 포함된 닉에서 매우 신뢰가 가는군요 ㄷㄷ ㅋㅋ
  • 농약벌컥벌컥

    농약벌컥벌컥 Lv.1

    24.12.30 · 211.♡.184.190

    생각보다 주위에 없는데 생각?보다 있습니다 ㅎㅎ
  • M

    massei85 Lv.1 → 농약벌컥벌컥 작성자

    24.12.30 · 118.♡.15.123

    마이너 중 메이저 느낌입니다 ㅋㅋ 제 주위에서는 하스켈 파는 분이 클로저도 꽤 쓰셨더군요 어둠의 함수단 ㄷㄷ

댓글을 작성하려면 이 필요합니다.