본문 바로가기

프로그래밍 기술 노트/Functional Study

(30)
Lazy 한 시퀀스에서의 부수효과가 있는 함수 사용시 주의 포커 게임을 제작하다가 다음과 같은 코드를 사용했다. let Random = System.Random() type Suit = Spade | Dia | Heart | Club type Card = {suit:Suit; number:int} type Concentration = Card * bool * int let Deck = seq { for s in [Spade;Dia;Heart;Club] do for y in 1..12 -> ({suit=s;number=y},true) } let Shuffled = Seq.sortBy (fun x -> Random.Next()) Deck let GameDeck = Seq.mapi (fun i (c,b) -> Concentration(c,b,i)) Shuffled D..
[Functional Study] 7. Pattern Matching & Destructuring https://github.com/dream365/FP-Seminar/blob/master/Concept/7.%20Pattern%20Matching%20%26%20Desctuction/Concept%20and%20Example.md 함수형언어의 누가봐도 장점인 패턴매칭과 보다 효율적인 패턴매칭을위한 Destructuring 에 관한 설명 C++ / C# / F# / clojure 에 관한 예제 및 설명 Pattern Matching 대상이 특정한 패턴을 가지고 있는가를 확인한다. 기존의 if문 타입 체크나 switch-case 문의 발전형식이다. Destructuring 구조를 분해하는것. 예를 들어 튜플에서 (a,b) = ("key","value") 면 a와 b에 각각 "key", "value" 가 알..
[Functional Study] 5. Lazy https://github.com/dream365/FP-Seminar/blob/master/Concept/5.%20Lazy%20Loading/Concept%20and%20Example.md 필요(요구)할떄 결과를 계산하는 방식인 Lazy 에 관한 정리 필요할때 객체를 생성하면 Lazy Initialization 필요할때 식을 평가하면 Lazy Evaluation C++ / C# / F# / clojure 에 관한 간단한 설명 및 예시 설명 Lazy 필요(요구)할떄 결과를 계산하는 방식. 필요할때 객체를 생성하면 Lazy Initialization 필요할때 식을 평가하면 Lazy Evaluation 장점 처음에 모든것을 초기화하는데 장시간 소요되는것으르 막음. 무한한 리스트를 생성할수있다. 단점 필요할때 ..
[Functional Study] 3. Currying https://github.com/dream365/FP-Seminar/blob/master/Concept/3.%20Currying/Concept%20and%20Example.md Functional Study 중 챕터3인 Currying을 간단하게 정리 챕터2, 5, 7의 경우 선배분이 정리하기로 해서 정리해서 올라가면 포스팅예정. 나 : (C++) / C# / F# / Clojure 의 예제코드를 담당하고 선배가 Java / Kotlin / Scala 의 예제 코드를 담당했는데 내가 담당한 언어에서 사실상 F# 만 진짜 커링이라... 예제코드는 비슷하게 동작하는 closure 로 구현하였음. Currying 하나 이상의 파라미터를 받는 함수에서 몇몇 파라미터를 미리 지정하여 새로운 함수로써 사용하는것...
[Functional Study] 1. Lambda, map, reduce, filter https://github.com/dream365/FP-Seminar/blob/master/Concept/1.%20Lambda%20%26%20Map%20%26%20Reduce%20%26%20Filter/Concept%20and%20Example.md Functional Study 진행중. 1,3,5,7챕터를 본인이 정리하기로 하였다. 해당 링크는 Lambda, map, reduce, filter 에 관하여 정리한 글 lambda 이름없는 함수, 무명함수, 익명함수 등으로 변역되며 람다대수에 기초함. FP 에서는 함수를 1급 시민으로 취급하여 파라미터로 넘기거나 함수자체를 반환 할 수 있다. 이때 파라미터로 넘길 함수를 따로 만들지 않고 그순간에만 사용하거나 간단한 식인경우 함수 본체만 넘기면 편한다. 장..
[F# Practice]한밤의 늑대인간 https://github.com/Lee-WonJun/FP-Seminar/blob/master/Tutorial/OneNightUltimateWerewolf/F%23/GameEngine.fs Lee-WonJun/FP-Seminar Contribute to Lee-WonJun/FP-Seminar development by creating an account on GitHub. github.com F# 공부용으로 만들어본 한밤의 늑대인간 보드게임 실제로 게임자체를 진행하는건 아니고 GameEngine 모듈...? 이랑 밤이 진행되는것을 제작 짤수록 FP 보다는 OOP 가 되어가는 느낌과 F# 에서 list를 각각의 파라미터로? clojure의 apply 과 같은 방법으로 보내는 방법을 잘 몰라서 걍 튜플로 넘..