J: 분할

J: 분할 (Intro 14)

J 입문 14장에서는 부분합을 계산하기 위해 인자의 각 접두사(prefix)·접미사(suffix)·대각선에 함수를 적용하는 분할(partition) 부사 \, \., / (oblique)를 설명해요.

출처: 문서

본문

함수 sum=: +/은 전체 목록 인자에 적용돼요. 부분합(subtotals)을 계산하려면 그것을 인자의 각 접두사에 적용해야 해요. 예를 들어:


   sum=: +/
   a=: 1 2 3 4 5 6
   (sum a) ; (sum\ a)
+--+--------------+
|21|1 3 6 10 15 21|
+--+--------------+

기호 \은 접두사 부사(prefix adverb)를 나타내며, 그 인자(이 경우 sum)를 최종 인자의 각 접두사에 적용해요. 부사 \.은 접미사(suffix)에 비슷하게 적용돼요:


   sum\. a
21 20 18 15 11 6

단항 <은 단순히 인자를 박스(box)하고, 따라서 동사 <\<\.은 분할의 효과를 매우 선명하게 보여줘요. 예를 들어:


   <1 2 3
+-----+
|1 2 3|
+-----+

   (<1),(<1 2),(<1 2 3)
+-+---+-----+
|1|1 2|1 2 3|
+-+---+-----+

   <\ a
+-+---+-----+-------+---------+-----------+
|1|1 2|1 2 3|1 2 3 4|1 2 3 4 5|1 2 3 4 5 6|
+-+---+-----+-------+---------+-----------+

   <\. a
+-----------+---------+-------+-----+---+-+
|1 2 3 4 5 6|2 3 4 5 6|3 4 5 6|4 5 6|5 6|6|
+-----------+---------+-------+-----+---+-+

사선 부사(oblique adverb) /은 표를 대각선을 따라 분할해요. 따라서:


   </. t=: 1 2 1 */ 1 3 3 1
+-+---+-----+-----+---+-+
|1|3 2|3 6 1|1 6 3|2 3|1|
+-+---+-----+-----+---+-+

   t ; (sum/. t) ; (10 #. sum/. t) ; (121*1331)
+-------+-------------+------+------+
|1 3 3 1|1 5 10 10 5 1|161051|161051|
|2 6 6 2|             |      |      |
|1 3 3 1|             |      |      |
+-------+-------------+------+------+

연습문제 (Exercises)

14.1

점진적 곱(progressive products), 점진적 최댓값, 점진적 최솟값을 위한 sum=:+/\에 유사한 프로그램을 정의해 보세요.

14.2

다음 프로그램들과 주석을 12절의 것들처럼, 즉 읽고 쓰기의 연습으로 다루세요. c=:1 3 3 1, d=:1 2 1, x=:i.5c pol x, c pp d, (c pp d) pol x 같은 표현을 실험해 보세요. 계급(rank)의 사용에 대해서는 사전 또는 20절을 참조하세요:

J 의미
pol=: +/@([*]^i.@#@[)"1 0 다항식(Polynomial)
pp=: +//.@(*/) 다항식 곱(Polynomial product)
pp11=: 1 1&pp 1 1에 의한 다항식 곱
pp11 d
pp11^:5 (1)
ps=: +/@,: 다항식 합(Polynomial sum)

더 알아보기 (Learn more)

출처: Intro 14. Partitions