CLisp 이나 C++ 에서는 쉽게 설정하는 함수 인자 기본 값 (Default) 설정하는 방법에 관한 예제입니다. 일단 쉽게 설정하는 방법이 없는 듯 합니다. 

1 user=> (defn bar
2          ([a b]   (bar a b 100))
3          ([a b c] (* a b c)))
4 #'user/bar
5 user=> (bar 5 6)
6 3000
7 user=> (bar 5 6 2)
8 60

이 와 같은 식으로 가장 인자 수가 많은 함수를 내부에서 호출하는 형식으로 꾸며줍니다. 그 외에 다른 방식으로는 :keyword 형식으로 호출하는 등등이 있으나 위에 쓰여지는 방법이 그나마 다른 언어(Language)에 익숙한 방법이라 사료됩니다. 

defn 설명 페이지 


lein 을 이용한 프로젝트 생성시 요즘 clojure 버젼이 1.4.0 이 기본인 것처럼 만들어 집니다. 아무 생각 없이 slime 을 연결해서 코딩을 시작하면 무엇인지 이상한 기분이 들기 시작합니다. 바로

doc

함수 입니다. doc 함수가 동작을 안합니다. "1.2.1" 버젼에서는 제대로 동작했는데 갑자기 동작안하기 시작합니다. 정확히는 "1.3.x" 와 "1.4.0" 에서 동작을 안합니다.

REPL 상에서

user> (use 'clojure.repl)


만 해주면 그 다음부터 사용이 됩니다.
프로그래밍을 하다보면 수학적 귀납법의 원리를 이용하여 함수가 제대로 작성 됐는지 검증하면 편할 때가 많습니다. 

수학적 귀납법

자연수 n과 관련된 명제 P(n)을 증명하려고 할 때, 다음 두 가지만 증명하면 된다.
1) n=1일 때, 참이다.
2) n=k일 때, 참이라고 가정하면 n=k+1일 때도 참이다.
1)과 2)에 따라서 모든 자연수일때 명제가 성립한다.

살아오면서 수학과 프로그래밍에 대해서는 별다른 연관성을 못 느끼고 있었습니다. '수학적 사고나 논리력 증대가 프로그래밍에 도움이 되는 것이겠지' 정도로만 치부하고 살았는데, 최근에 결국 프로그램의 대부분이 아무리 많은 데이터를 다루더라도 index 형태로 처리하게 된다면, 함수를 작성할 때 귀납법을 고려해서 작성하면 좋구나 하고 느낄 때가 있었습니다. 

함수를 작성할 때 위에 쓰여진 귀납법 형태대로 따르면 n=k 일 때 제대로 돌아간다고 생각하고 작성해 줍니다. 그리고 n=1 일때 실제로 맞게 돌아가는지 확인을 하고 n=k+1 일 때 제대로 돌아가는지 체크를 해주면 깔끔하게 작성이 됩니다. 

딱히 방법이랄 것은 아니지만, '맞아 이런거였지?' 정도로만 인식해도 함수를 잦은 디버그 없이 작성할 수 있게 되는 요령이 됩니다. 



+ Recent posts