J: 위치어

J: 위치어

J 언어의 위치어(locatives)와 로케일(locale) 개념을 설명해요. 명명된 로케일 참조, 전역 이름의 실행, 로케일 경로와 채우기(populate)를 다뤄요.

출처: 문서

본문

위치어 abc_f_는 로케일 fabc를 가리켜요. 간접 위치어(indirect locative) abc__xy는 현재 값이 xy인 이름을 가진 로케일의 abc를 가리켜요. 이전 버전과의 호환성을 위해 비표준 abc__도 받아들여지며 abc_base_와 같아요. 따라서:


   b=: 1
   Rome=: 2
   Rome_NewYork_=: 20
   f_NewYork_=: 3 : '3*b=: Rome+y'
   f_NewYork_ 10
90

   b,Rome
1 2

   b_NewYork_
30

이름은 명시적 정의(Explicit Definition) (:) 내에서 =.로 할당되지 않으면 전역(global)이에요. 모든 전역 이름은 현재 로케일에서 실행돼요. 처음에 현재 로케일은 base예요. 위치어 f_abc_는 실행되는 동안 현재 로케일을 abc로 전환해요. 동사 18!:4도 현재 로케일을 전환하며, 18!:5는 그 이름을 줘요.

이름 f_abc_는 로케일 abc에서 실행되는데, f에서 참조되는 전역 이름을 그 안에서 찾고, 발견되지 않으면 abc의 경로(path)에 있는 로케일들에서 찾는다는 의미예요(그러나 여전히 abc에서 실행돼요). 로케일의 경로는 처음에 ,<'z'이며, 단 로케일 z는 처음에 빈 경로를 가지고, 18!:2로 변경할 수 있어요.

로케일은 흔히 스크립트로 채워지는데(populated), 스크립트를 실행하는 데 쓰이는 동사의 이름을 적절히 붙여서 채워요. 예를 들어, 파일 stats가 다음 스크립트를 포함하면:


   mean=: sum % #
   sum=: +/

그러면:


   ssx_z_=: 0!:10             Silent script execution

   ssx_a_ <'stats'            Populate locale a

   mean=: 'in base locale'
   mean_a_ 3 4 5
4

   ssx_bc_ <'stats'           Populate locale bc
   sum_bc_ 3 4 5
12

이 예는 로케일 경로의 사용, 즉 z 로케일을 보여주기도 해요. 먼저 유틸리티 ssxz 로케일에 정의돼요. ssx_a_를 실행할 때 ssx는 로케일 a에서 발견되지 않으므로 로케일 z에서 찾아지고(찾으며)요. ssx_a_는 로케일 a에서 실행되므로, stats 스크립트의 이름들은 로케일 a에 정의되어 그리하여 그 로케일을 채워요. ssx_bc_도 마찬가지예요.

부록 A의 18!:와 시스템에 배포된 "Locales" 및 "Object Oriented Programming" 랩(labs)도 참조하세요.

더 알아보기 (Learn more)

출처: I. Locatives