massei85 (175.♡.138.140)
2024년 12월 30일 PM 08:25 · 수정됨(22:37)
일부러 업무에 상관없는 놈을 살펴보자 해서 Lisp 방언들 중에 찾아보다가 JVM 위에서 돌아가는 Clojure를 골라보았습니다
Lisp은 소싯적에 MIT Scheme이나 Emacs Lisp 살짝 다뤄본게 다였지만 그래도 아무튼 다같은 Lisp이라 적응하는데 도움이 되었습니다
core.async나 core.logic 같은 것도 재미지고 무엇보다 강력한 매크로 기능 탐구하느라 시간 훌쩍 가네요
다만 마이너한 언어다보니 주변에 의견 나누며 공부할 사람이 적어서 아쉽습니다
한국 클로저 사용자 모임 밋업이 종종 열리는것 같은데 그런데 나가볼 레벨은 아직 아닌거 같고
내년에 좀 기웃거려봐야겠습니다
현재는 유튜브, 특히 언어 창시자인 리치 히키 아재 영상 참조 많이 하고 있네요
댓글 (13)
-
아아스파라거스
24.12.30 · 125.♡.122.95
클로저 재밌죠.. pipe 로 함수 합성하면 그렇게 이뻐보이더라고요 ㅋㅋ - M
massei85
→ 아스파라거스 작성자
24.12.30 · 175.♡.138.140
같은 기능이더라도 최대한 멋드러지게(?) 조합하는 재미가 쏠쏠합니다 ㅋㅋ -
사사자바람연꽃
24.12.30 · 221.♡.34.113
사용자 적은 언어는 프래그래밍의 기본인
복사 붙여넣기가 힘듭니다.
{emo:onion-005.gif:100} - M
massei85
→ 사자바람연꽃 작성자
24.12.30 · 175.♡.138.140
이놈은 괄호 지옥 때문에 물리적으로도(?) 복붙이 힘들더군요 ㅋㅋ -
트트라팔가야
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
→ 트라팔가야 작성자
24.12.30 · 175.♡.138.140
아 저도 입문 며칠 후에 바로 다익스트라랑 A*부터 해봤었는데 반갑네요 ㅋㅋㅋ -
김김재귀
24.12.30 · 123.♡.204.82
재미있고 알흠다운 괄호월드.. 스킴은 마법사책 보셨나본데 그럼 엥간한건 다 아시는구먼요
클로저리안 slack서버에 #clojure-korea 채널 오셔서 모르시는거 물어보시면 좋아하실?겁니다 ㅎㅎ - M
massei85
→ 김재귀 작성자
24.12.30 · 175.♡.138.140
리습 입문자의 상당수가 sicp 때문에 입문한 경우가 많을거라 생각합니다 ㅋㅋ 그나저나 재귀가 포함된 닉에서 매우 신뢰가 가는군요 ㄷㄷ ㅋㅋ -
농농약벌컥벌컥
24.12.30 · 211.♡.184.190
생각보다 주위에 없는데 생각?보다 있습니다 ㅎㅎ - M
massei85
→ 농약벌컥벌컥 작성자
24.12.30 · 118.♡.15.123
마이너 중 메이저 느낌입니다 ㅋㅋ 제 주위에서는 하스켈 파는 분이 클로저도 꽤 쓰셨더군요 어둠의 함수단 ㄷㄷ
댓글을 작성하려면 이 필요합니다.