StephanWolfram이 고안해 낸 언어. Wolfram Research의 범용 과학 계산 프로그램 Mathematica에서 쓰임.
Expression evaluation과 pattern matching을 기본으로 하고, 다양한 스타일의 프로그래밍이 가능하다.
Wolfram Research에 따르면 Everything is an expression이라고 한다.
인터프리터 앞에서 이것도 해 보고 저것도 해 보고 시행착오 결과를 함수로 정의하고 그런 식으로 작업하면 매우 편합니다만, 자칫 write-only functional code를 남발하게 될 가능성이 있더군요. --Swefn
write-only functional code가 뭐죠?
MathematicaLanguage에는 LispLanguage에서 따온 개념이 있는데, 바로 List 개념입니다. List는 다른 ProgrammingLanguage의 배열이라는 개념을 포함하면서 그 자체로도 변수로 넘길 수도 있는 데이터 형식입니다. (참고로 MathematicaLanguage에는 포인터 개념이 없습니다.) 또한 List 안에 List를 만들 수 있어서 다차원 배열은 물론 복잡한 nested list를 만들 수 있습니다. (예: 'write-only code'란 짤땐 아무런 생각 없이 대충 짜서 돌아가는데 나중에 이게 뭐 하는 코드인지 읽혀지지는 않는 종류의 코드를 말합니다.
{{{ {{{1},2},3} }}}) LispLanguage에서처럼 다음과 같은 명령이 가능합니다. {{{ In[1]: Apply[Plus, {x, y, z}] Out[1]: x + y + z In[2]: Plus@@{x, y, z} Out[2]: x + y + z}}} MathematicaLanguage는 한술 더 떠서 더욱 다양한 list manipulation functions를 제공합니다. {{{ In[3]: Map[f, {x, y, z}] Out[3]: {f[x], f[y], f[z]} In[4]: Fold[f, {x, y, z}] Out[4]: f[x, f[y, f[z]]] In[5]: a + {x, y, z} Out[5]: {a + x, a + y, a + z} In[6]: a {x, y, z} Out[6]: {a x, b y, c z} In[7]: {a, b, c}{x, y, z} Out[7]: {a x, b y, c z} In[8]: {a, b, c}.{x, y, z} Out[8]: a x + b y + c z }}} ==== 예제: MathematicaLanguage로 1부터 100000까지 더하는 법 ==== 1. 간단하게 1부터 100000까지 늘어놓고 전부 더한다. 가장 빠르다. {{{ Apply[Plus, Range[100000]] (* 혹은 Apply를 연산자로 바꿔서 *) Plus@@Range[100000] }}} 1. 내부 함수를 이용한다. 그 다음으로 빠른 방법. {{{ Sum[i,{i,1,100000}] }}} 여기서 1은 생략할 수 있다. 1. 보통 코딩하는 방법처럼 기준 숫자와 합한 숫자를 두면서 기준 숫자를 증가시키며 합한 숫자에 계속 더해 나간다. 제일 느리다. {{{ Nest[# + {1, #[[1]]} &, {1, 0}, 100000] }}} 1. 재귀함수를 정의해서 사용한다. 무한루프를 막기위해 재귀단계의 상한선 설정이 있는데 거기에 걸리게 된다. {{{ SumUpTo[n_Integer] := SumUpTo[n - 1] + n; SumUpTo[0] := 0; SumUpTo[100000] }}} ---- [컴퓨터분류] [수학분류]