Mathematica Language

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
StephanWolfram이 고안해 낸 언어. Wolfram Research의 범용 과학 계산 프로그램 Mathematica에서 쓰임.

Expression evaluation과 pattern matching을 기본으로 하고, 다양한 스타일의 프로그래밍이 가능하다.

Wolfram Research에 따르면 [http]Everything is an expression이라고 한다.

인터프리터 앞에서 이것도 해 보고 저것도 해 보고 시행착오 결과를 함수로 정의하고 그런 식으로 작업하면 매우 편합니다만, 자칫 write-only functional code를 남발하게 될 가능성이 있더군요. --Swefn
write-only functional code가 뭐죠?
'write-only code'란 짤땐 아무런 생각 없이 대충 짜서 돌아가는데 나중에 이게 뭐 하는 코드인지 읽혀지지는 않는 종류의 코드를 말합니다. :)

MathematicaLanguage에는 LispLanguage에서 따온 개념이 있는데, 바로 List 개념입니다. List는 다른 ProgrammingLanguage의 배열이라는 개념을 포함하면서 그 자체로도 변수로 넘길 수도 있는 데이터 형식입니다. (참고로 MathematicaLanguage에는 포인터 개념이 없습니다.) 또한 List 안에 List를 만들 수 있어서 다차원 배열은 물론 복잡한 nested list를 만들 수 있습니다. (예:
{{{ {{{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] }}}
----
[컴퓨터분류] [수학분류]

"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>