분류 전체보기 726

Clojure 스크립트 소스 실행하기

* JLine 다운로드: http://jline.sourceforge.net/downloads.html jline-1.0.jar 파일을 d:\clojure-1.4.0 폴더에 복사함 *일괄 파일 clj.bat 의 내용 :: 1. Change the constants to match your paths :: 2. Put this clj.bat file on your PATH :: :: Usage: :: :: clj # Starts REPL :: clj my_script.clj # Runs the script :: clj my_script.clj arg1 arg2 # Runs the script with arguments @echo off :: Change the following to match your p..

Clojure 설치하고 테스트하기

Clojure 는 Rich Hickey 씨가 만든 Lisp 계열의 함수형 언어로서 자바가상기계(JVM) 위에서의 동작을 목표로 하고 있다. (CLR과 자바스트크립트에서 동작하는 Clojure 는 각각 별도의 프로젝트로 개발되고 있다,) 다른 Lisp 아류와는 달리, Clojure 는 소스 코드를 데이터로 본다. Clojure 는 철저하게 값(value)은 수정 불가 값(immutable value) 만을 견지하고 ,특히 다중 쓰레드 환경에서 더 견고한 프로그램을 개발이 용이하도록 촉진한다. Clojure 홈페이지 위키피디아의 Clojure 설명 위키북의 Clojure Programming/Getting Started Clojure 언어 프로그래밍 (추천) Lisp 언와 Clojure 언어의 비교 (추천)..

함수형 언어 Scheme 의 소개와 설치

Scheme 홈페이지 CHICKEN Scheme 홈페이지 Wikipedia 에서 소개하는 Scheme Lisp 언어의 변종인 주요 후계자 언어로는 보통 Common Lisp 과 Scheme 두 가지가 꼽힌다. Scheme 언어는 1975년~1980년 기간에 MIT 인공지능 연구실에서 Guy L. Steels 와 Gerald 와 Jay Sussman 에 의해 개발되었으며, RnRS(Revised Report on the Algorithmic Language Scheme) 라는 이름으로 그 표준이 공개되어 왔다. (여기서 n은 숫자) R5RS는 1998년에 발표되었으며 가장 널리 쓰여진 Scheme 이며, R6RS 는 2007년 8월 27일에 발표되었고, R7RS 가 최근 2012년 12월 10일에 발표 되..

OCaml 언어, F# 언어. Haskell 언어로 각각 리스트 쉽게 생성하기 그리고 zipWith 을 이용한 행렬 곱셈

수학에서 집합을 표현하는 방법에는 열거형 표현법과 진술형 표현법으로 나뉘어진다. { 3, 7, 10, 14 } 는 열거형 표현이고, { y | y = n + 2n + [n/2] where n = 1, 2, 3, 4 } 는 진술형 표현이다. (단 여기서 [x] 는 가우스 기호) (참고로 아래의 구문에서 기호 ghci GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Prelude> [ x + 2*x +..

OCaml 언어로 평방근, 입방근, n제곱근 구하는 함수를 구현하고 테스트하기

음이 아닌 실수 A 의 평방근 sqrt(A) 를 구하는 Heron 의 방법: 반복함수 g(x) = (x + A/x) / 2 를 이용 실수 A 의 n제곱근 root(n, A) 를 구하는 Newton-Raphson 의 방법 반복함수 g(x) = ((n-1)*x + A/(x**(n - 1))) / n 를 이용 n = 2 인 경우에는 Newton-Raphson 의 방법이 Heron 의 방법과 동일하다. (참조. http://en.wikipedia.org/wiki/Newton's_method ) OCaml 언어에는 부동소수점수의 지수연산자 ** 가 있다. 하지만 차후 필요한 데가 있을 것 같아서 이와 유사한 n 제곱 함수와 n 제곱근 함수를 구현해 보았다. 지수가 정수인 거듭제곱을 계산하는 함수도 nPow, gP..

30000! 빨리 계산하기 with OCaml

* 꼬리 재귀호출과 패턴 매칭을 이용하여 구현한 팩토리얼과 피보나치 수열 계산 (* Filename: fact.ml Rapid factorial and fibonacci seq implementations by pattern matching and tail recursive call Execute: ocaml nums.cma fact.ml or Compile: ocamlc -o fact.exe nums.cma fact.ml Execute: fact Date: 2013. 2. 6. Author: pkim __AT__ scripts.pe.kr *) open Printf open Num let bignum x = num_of_int x ;; let to_string x = string_of_num x ;; l..

int 타입과 bigint 타입 간 상호 타입 변환 with OCaml

OCaml 언어에서 쓸 수 있는 bigint 타입은 Big_Int 모듈의 것과 Num 모듈의 것 두 가지 종류가 있다. Num 모듈의 것은 유리수 계산에도 쓸 수 있는 타입이지만 그 대신 속도가 느리고, Big_int 모듈의 것은 사칙연산자 마저도 정의 되어 있지 않아 사용하는데는 불편하지만 다소 더 빠르다. 그래도 Java 언어의 java.math.BigInteger 보다는 많이 느리다. OCaml 언어의 타입 체크는 C 언어나 Java 언어 보다도 훨씬 엄격하며, int, int32, int64 간의 오토박싱, 언박싱은 아예 지원되지 않으며 항상 명시적인 타입 변환을 해주어야 한다. 사칙 연산 기호 마저도 int 타입이면 + - * / float 타입이면 +. -. *. /. Num.Int 또는 Nu..

Pollard's rho method 소개: 정수의 인수분해(factorizing integers) with OCaml

정의 (소수와 합성수) 1보다 큰 양의 정수 n에 대하여 (i) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하면, n을 합성수(合成數, composite number)라고 한다. 참고로 이 경우, a, b 중에 적어도 하나는 sqrt(n) 보다 작거나 같다. 합성수의 예로는 4, 6, 9, 24, 143 등이 있다. (ii) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하지 않으면, 즉 n을 두 양의 정수의 곱으로 표현하는 방법이 1*n과 n*1 두 가지 뿐이면, n을 소수(素數, prime number)라고 한다. 소수의 예로는 2, 3, 5, 7, 11 등이 있다. n이 소수인지 아닌지 확인하려면, n을 2 보다 크거나 같고 sqrt(n) 보다 작거..