Concatenative Programming Language
대충 어디쯤의 위상 ¶ApplicativeProgrammingLanguage? ConcatenativeProgrammingLanguage? ¶
''imperative <-> functional인것처럼. imperative와 object-oriented가 함께 있을수있듯이. 예를들어, haskell은 functional + applicative겠죠. 또 명백히 concatenative인 FactorLanguage의 경우 말씀하신 imperative, +object-oriented이기도 하구요. 그것들이 같은 수직선상에 있어서 어떤지점이 딱 하나의 패러다임만 쫒지는 않는다는걸 잘 아시는듯한데요? (언급하셨듯이 파이썬, 자바는 축이 2개인 공간에 있겠죠. 위치는 imperative, object-oriented. 그리고 그 2차원의 축에 concatenative, applicative을 추가하는게 아니라 새로운 축이 있다고 생각하시는게 맞지않을까싶네요.)
applicative, concatenative가 functional, object-oriented, imperative등과 같은 paradigm이지만, 같은 위상에 위치한게 아니라고밖엔 설명을 못드리겠네요.
http://concatenative.org/wiki/view/Concatenative language <- 여기를 참고해주시길.
- ageldama''
''사족을 더해보면 applicative language에서 x에 대해서 함수 A, B, C, D을 적용하는 예는 다음과 같다고 하더군요. (D (C (B (A x)))) 혹은 D(C(B(A(x)))). 이에 반해서 concatenative language에서는 x A B C D와 같이 표현합니다. (아무리 생각해도 자바, 파이썬은 전자인것 같은데요^^;). 정확한지는 확신이 없지만, unix-shell과 같이 pipe을 이용해 하나의 자료흐름에 대해서 여러 연산을 적용하는예도 concatenative의 한예가 아닐까 싶습니다. find /etc -name "*.bak" | sort | uniq | wc -l -ageldama'' "Hello, World!" ¶
! 1) "Hello, World!" 문자열을 스택에 넣어놓고
! 2) 스택에서 하나를 꺼내 화면에 출력하는 print '워드'를 평가 "Hello, World!" print 간단한 Factor에서 REPL세션 ¶(이하의 ( scratchpad )은 프롬프트, !으로 시작하는 행은 주석.)
! 스택에 2를 넣어요. ( scratchpad ) 2 --- Data stack: 2 ! 스택에 3을 넣어요. ( scratchpad ) 3 --- Data stack: 2 3 ! 스택의 두값을 더해서 결과를 스택에 쌓아요. ( scratchpad ) + --- Data stack: 5 ! 스택의 값의 제곱을 구해요. ( scratchpad ) sq --- Data stack: 25 ! 스택의 맨 마지막값을 꺼내서 보여줘요. ( scratchpad ) . 25 ! 지금까지 사용한, +, sq, . 함수의 정의를 살펴보기 ( scratchpad ) \ + see IN: math MATH: + ( x y -- z ) foldable flushable ( scratchpad ) \ sq see USING: kernel ; IN: math : sq ( x -- y ) dup * ; inline ( scratchpad ) \ . see USING: io ; IN: prettyprint : . ( obj -- ) pprint nl ; ! (2+3)**2을 구해서 화면에 출력해요. (지금까지를 한줄로.) ( scratchpad ) 2 3 + sq . 25
관련정보 ¶
|