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와 동등하다는 명제를 테스트하고, ft와 AT를 단독으로 입력해 그 정의를 표시해 보세요.
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