본문 바로가기

전체

(350)
[LolChatLang] 롤챙 프로그래밍 언어를 만들어보자 지인이 말한 all 함수 편하다 -> 올 ㅋㅋ -> 함수명이 올 ㅋㅋ 으로 지어도될듯 -> 진짜/시발/근데/아니 짤 -> 이거 롤 채팅 아니냐? 라는 기적의 야크털 깎기식 논법으로 프로그래밍 언어를 하나 만들어보자는 생각이 들었고 주말동안 뚝딱 만들었다. (사실 밤샘) 언어 롤챙 (LolChatLang) 이다 https://github.com/Lee-WonJun/LolChatLang GitHub - Lee-WonJun/LolChatLang: 롤채팅식 프로그래밍 언어 [롤챙] 롤채팅식 프로그래밍 언어 [롤챙]. Contribute to Lee-WonJun/LolChatLang development by creating an account on GitHub. github.com 이러한 파서를 만들때, 구문만..
[함수형 미세 팁] 파라미터 3개 이상의 Function 으 로 Reduce 하기 reduce / fold 는 함수형 프로그래밍의 hello world 같은 존재로 요즘에는 뭐 워낙 많이쓰기 때문에 자세한 설명이 필요없겠지만 간단하게 도식화 하자면 다음과 같다 위 예시는 [1 2 3 4 5 6 7] 의 시퀀스에 + 로 reduce 돌린 결과다. reduce 는 다루기 위험한 index 기반 for문의 아주 휼륭한 대체제로, 단순히 값을 계산해 내는 방법부터, reduce 로 ListA 에서 ListB 로 변환 (map) / ListA 에서 특정 추출 (filter) 도 reduce / fold 함수로 구현할수있다. (즉 List[A] 를 reduce 한다고 A 가 나오는건 아니라는거) 뭐 이게 중요한게 아니고 위와 같이 동작하다보니, reduce 에서 받는 함수는 기본적으로 F(X,Y..
[liftIO] 빠르게 올리는 함수형 컨퍼런스 liftIO 2022 후기 liftIO 2022 | Festa! liftIO 2022 | Festa! Festa에서 당신이 찾는 이벤트를 만나보세요. festa.io 작년에 이어 liftIO 가 올해도 개최되었다. 작년과 다르게 Offline 이라는점 우리같은 힙스터 함슬람에게 그린랩스 Dev 와 liftIO 는 몇 안되는 컨퍼런스이기 때문에 이번에도 참석하게 되었다. 참고로 [liftIO] 함수형 컨퍼런스 liftIO 후기 (tistory.com) 이건 liftIO 2021 후기 저번에 받은 lift IO 티셔츠를 입고갔다가 주최자분이 알아봐 주셔서 잠시나마 네트워킹 시간도 가졌다. 구조적 귀납증명 / PBT / TypeClass / Haskell DSL(?) / Elixir ... 등등 유용한 세션이 있었고 개인적으로는 1. ..
Kotlin 의 Lambda 문법으로 DSL 을 구축해보자 DSL 을 Kotlin / Scala 에서 구현할때 자주 사용하는 기법중 하나는 Last Parameter 의 람다 를 {} FileWriter(outPath).use { fileWriter -> fileWriter.write(fileReader.readText()) } } // DSL 쓸때 fileScope(inPath, outPath) { (fileReader, fileWriter) -> fileWriter.write(fileReader.readText()) } } // DSL 용 헬퍼 Class / 함수 data class Rewriter(val fileReader: FileReader, val fileWriter: FileWriter) fun fileScope(inPath: String, outP..
Delimited Continuations 가 대체 뭔데? 본 포스팅은 후속문 자체의 정의와 설명에 관한 내용이 아니므로 후속문의 개념은 너무나도 잘 쓰여진 아래 링크 참조 (거의 유일한 한글자료이자 아주 상세하게 쓰여진 자료) Computat ergo est: 후속문(Continuation) : 제1부. 개념과 call/cc (guruma.github.io) Delimited Continuations 이 무엇인지 파악하기 위하여 Continuations(후속문) 을 개념적인 Level 에서 훑어 보자 CPS (Continuations Passing Style) 흔히 callback 이라고 부르는 방식이다. Continuations (후속 작업을) Passing(넘기는) Style(스타일) First-Class Continuation 후속문 자체를 1급 시민으로..
[Toy] GitDot - Canvas로써 의 Github Github 의 Profile 에서는 Commit (contribution) 내역을 볼수있다. 활동을 하면 하면수록 해당 날짜에 해당하는 Cell 이 더 밝은 초록색이 되는데, 그래서 보통 "잔디" 심는다고 표현한다. 1일 1커밋으로 모든 셀을 다 초록색으로 만드는 사람도 있는가 하면, 이걸로 그림을 그리는 사람도 있다. 다만 git은 기본적으로 local 에서도 돌아가도록 설계되어있으므로 Commit 의 시간은 진짜 commit id 의 time 을 따라가게 된다. 즉 Local 에서 Commit Time 을 변경하고 Push 하면 그 변경된 Time 에 잔디가 심어지는 것이다. 뭐.. 나는 애초에 1일 1커밋같은거 신경도 안쓰고 있기 때문에 굳이 조작해서 커밋을 늘릴 생각은 없는데, 윈도우 작업관리자..
[Monad] 시퀀스를 여행하는 모나드를 위한 안내서 제목이 저런 이유는 Sequence / Traverse 에 관한 내용이기 때문.. Sequence 개발을 하다가 보면 List 같은 형태의 Option/Result 가 필요한 경우가 생기게 된다. 실무에서 자주쓰는 대표적인 예시중에 다음 같은것이 있다. N 개의 URI 에 응답을 조합한다, N개중 1개라도 응답이 오지않으면 Fail 이다. MSA 에서 API Composition 할때나, FE 에서 Server 에 여러번 요청을 할때 등등.. 상당히 많이 쓰이는 로직이다. 간단하게 예시를 들어서 다음과 같다고 해보자, 편의를 위하여 가장 기본적인 Type만 사용하였다. 내 블로그에서 001~003 까지 결과를 알려주는 함수 MyBlog 를 짠다. 요청해야할 URI : ["see-ro-e.tistory.c..
[F#/Fabulous] fabulous version 2 로 안드로이드 앱 만드는 기나긴 여정 BE 엔지니어가 FE 프로그래밍을 하면서 생긴 [마이너(F#) X 마이너(멀티플랫폼) X 마이너(Fabulous) X 마이너(Version 2)] 의 환장의 콜라보 발단 - 회사의 식대카드중 하나의 사용자 기록을 내가 기록하게됨 - 슬랙에 매번 작성하는데 먹은 사람들 이름 적는게 너무 귀찮음 - 그렇다고 완전 자동화 SW 를 짜기는 너무 어려움 - 그럼 관리를 도와주는 Helper SW 를 짜자! 라는 기적의 논리로 앱을 하나 짤 계획을 세웠다. 최종결과물은 아래와 같은 아주~~~ 간단한 앱이다. 가격, 장소를 입력하고 먹은 사람들은 버튼을 눌러서 추가하고 SEND 를 보내면 슬랙으로 Noti가 오는 그런 시스템.. 너무 간단한 SW 이기 때문에.. 업무에서 사용하고있는 Kotlin 이나 아니면 뭐 MA..