J: 프로그램

J: 프로그램 (Intro 6)

J 입문 6장에서는 명명된 프로시저 곧 프로그램(programs)을 설명해요. 동사 정의(definition), 구조적 프로그래밍, 표시 형식, 고정(fix) 부사를 다뤄요.

출처: 문서

본문

음악회에서 나눠주는 프로그램은 연주될 음악 순서를 기술해요. 어근 gram과 pro가 시사하듯, 프로그램은 그것이 처방하는 사건들보다 앞서 미리 쓰여진 무엇인가예요.

마찬가지로, 이전 섹션의 포크 +/ % #는, (+/%#)b처럼 문장에서 적용될 때 그 인자의 평균 계산을 처방하는 프로그램이에요. 그러나 아래에서 보여주듯 우리는 보통 그 프로시저에 이름을 할당하기 전까지는 그것을 프로그램이라 부르지 않아요:


   mean=: +/ % #
   mean 2 3 4 5 6
4

   (geomean=: # %: */) 2 3 4 5 6
3.72792

프로그램 mean은 새 동사이므로, mean=: +/ % # 같은 문장을 동사 정의(verb definition, 또는 definition)라고도 부르고, 그 결과 동사를 정의된 동사(defined verb) 또는 함수(function)라고 불러요.

정의된 동사는 때때로 구조적 프로그래밍(structured programming)이라 불리는 방식으로 더 많은 동사의 정의에 사용될 수 있어요. 예를 들어:


   MEAN=: sum % #
   sum=: +/
   MEAN 2 3 4 5 6
4

동사만 (인자 없이) 입력하면 그 정의가 표시돼요. 외부 접속사 !:은 표시 형식(boxed, tree, linear, parens)을 지정하는 데 사용할 수 있어요. (세션은 메뉴 항목 Edit|Configure...|View 아래에서 동사 표시 형식을 지정하도록 설정할 수도 있어요.) 따라서:


   mean
+/ % #

   9!:3 (2 4 5)
   mean
+-----+-+-+
|+-+-+|%|#|
||+|/|| | |
|+-+-+| | |
+-----+-+-+
  +- / --- +
--+- %
  +- #
+/ % #

연습문제 (Exercises)

6.1

AT=: i. +/ i.을 입력하고 AT 5 같은 표현을 사용해 프로그램 AT의 동작을 알아내 보세요.

6.2

다른 이항 함수들에 대해 유사한 함수 표를 정의하고 사용해 보세요.

6.3

프로그램을 정의해 보세요:


   tab=: +/
   ft=: i. tab i.
   test1=: ft = AT

그런 다음 test1을 다양한 정수 인자에 적용해 ft가 연습문제 6.1의 AT와 동등하다는 명제를 테스트하고, ftAT를 단독으로 입력해 그 정의를 표시해 보세요.

6.4

aft=: ft f.을 정의하고 test2=: aft = ft로 그 동등성을 테스트해 보세요. 그런 다음 정의를 표시하고 부사 f.의 효과를 말해 보세요.

답: 부사 f.는 그것이 적용되는 동사를 고정(fix)하며, 사용된 각 이름을 그 정의로 대체합니다.

6.5

tab=: */를 입력해 연습문제 6.3의 tab을 재정의하고, ft와 고정된 대안 aft에 미치는 영향을 관찰해 보세요.

6.6

mean=: +/ % #을 정의하고 mean t=: (i. !/ i.) 5처럼 표에 적용할 때의 동작을 말해 보세요.

답: 결과는 표 인자의 행들에 대한(over) 아닌, 행들의 평균(average of)입니다.

6.7

t의 열들에 대한 평균을 구하는 표현을 작성해 보세요.

답: mean |: t 또는 mean"1 t

더 알아보기 (Learn more)

출처: Intro 6. Programs