순위(J 프로그래밍 언어)
Rank (J programming language)![]() |
랭크는 스칼라(비 어레이 지향) 프로그래밍 언어에서 사용되는 루프의 일반화다.[1][2]또한 Lisp[3] 언어로 맵카를 일반화하고, 현대 기능 프로그래밍 언어로 맵을 일반화하며, APL\360으로 스칼라 확장, 내측(매트릭스) 제품, 외측 제품을 일반화한다.등급의 표준 구현은 언어 J일 수도 있지만, 확장 APL에 관한 국제표준화기구(ISO) 기술표준, NARS2000에서도 이용할 수 있다.
계급은 몇 가지 다른 의미를 가지고 있다.일반적으로 순위 개념은 직교 배열을 그 하위 배열의 관점에서 다루는 데 사용된다.[4]예를 들어, 2차원 배열은 전체 행렬로서 순위 2에서 다루거나, 암시적인 1차원 열이나 행으로 작업하기 위해 순위 1에서 다루거나, 개별 원자의 수준에서 작업하기 위해 순위 0에서 다룰 수 있다.
- 명사 순위 – 명사의 순위는 음이 아닌 정수다.
- 동사 순위 – 동사의 순위는 세 정수의 목록이다.
- 랭크 접속사 – 랭크 접속사 ()
"
)는 특정 계급의 동사를 도출하는 데 사용된다.
루핑의 일반화로 랭크
순위를 이해하려면 매우 기본적인 배열 위주의 프로그래밍 개념을 알아야 한다.대부분의 어레이 기반 언어에서 감소가 슬래시로 표시됨 /
. J에서 슬래시는 함수의 왼쪽 인수와 배열의 오른쪽 인수를 사용하여 해당 함수에 의해 축소된다.
+/ 1 2 3 6
결과는1 + 2 + 3
, 역시.
N-차원 정수 배열은 다음과 같이 생성될 수 있다.i.
정수의 벡터를 논거로 삼는다.정수 수는 치수를 정의하고, 각 정수의 절대값은 해당 치수의 길이를 정의한다.
i. 3 0 1 2 i. 2 3 0 1 2 3 4 5 i. 2 3 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
이제 덧셈으로 2차원 배열을 줄이자.
+/ i. 2 3 3 5 7
결과는0 1 2 + 3 4 5
, 역시.감소는 각 열을 따라 내려가며, 그 열의 모든 숫자를 합친다.
이 응용 프로그램+/
C 코드 조각에 해당하는 2차원 배열로:[5]
을 위해(j = 0; j < 3; ++j) { 합계를 내다[j] = 0; } 을 위해(i = 0; i < 2; ++i) { 을 위해(j = 0; j < 3; ++j) { 합계를 내다[j] += 배열하다[i][j]; } }
C 코드 조각에서와 같이 각 행의 항목을 추가하려고 한다고 가정합시다.
을 위해(i = 0; i < 2; ++i) { 합계를 내다[i] = 0; 을 위해(j = 0; j < 3; ++j) { 합계를 내다[i] += 배열하다[i][j]; } }
결과를 생산하기 위해3 12
우리는 단순히 순위를 사용해서 반복하지 않고 J로 이것을 할 수 있다.
+/"1 i. 2 3 3 12
J에서 계급이 어떻게 작용하는지를 더 자세히 설명하기 위해, 우리는 원래의 표현이 2위임을 알 수 있다.연산자는 배열에 가장 높은 순위에 매핑된다.
+/"2 i. 2 3 3 5 7
이러한 이름들로 저차원 배열을 가리키는 것이 일반적이지만,[6] 때로는 논란이 되기도 한다.[7]
이름 순위 원자 또는 스칼라 0 벡터 또는 목록 1 표 또는 행렬 2 텐서 또는 큐브 3
명사 순위
명사는, J에서 배열이다.명사의 순위는 그 배열의 치수 수입니다.파생동사#@$
명사의 순위를 결정하다
동사 순위
동사(J)는 명사 인수를 취하여 명사 결과를 산출하는 함수다.동사의 순위는 동사가 0보다 큰 명사에 어떻게 적용되는지를 조절한다.이 동사 순위는 세 개의 숫자로 표현된다.
모든 경우에, 셀에 적용되는 몇몇 기본적인 동사 정의가 있는데, 이는 표시된 등급의 하위선이다.또는, 인수에 그렇게 많은 차원이 없다면, 전체 인수를 의미한다.
동사에서 음의 순위는 그 인수에 대해 제공된 명사의 순위에서 지시값을 뺀 것으로 해석된다. (그러나 결코 0보다 작지 않다.)
- 예를 들어, 3등급을 주장할 때 1등급을 음수로 하는 동사는 그 주장을 2등 배열의 목록으로 세분화한다.동사의 몸은 이러한 2차원 서브레이에 각각 한 번씩 적용된다.
특정 동사와 특정 명사의 맥락에서, 그 명사의 치수는 프레임이라 불리는 접두사 치수의 순서와 셀이라 불리는 접미사 치수의 순서로 나뉜다.양의 동사 순위는 셀 치수의 수를 나타내고, 음의 동사 순위는 프레임 치수의 수를 나타낸다.
디아디치(diadic)의 경우에는 두 개의 프레임이 있는데, 하나는 왼쪽 논거, 하나는 오른쪽 논거에 대한 것이다.이 틀들은 일치해야 한다.프레임이 동일하지 않을 경우 하나는 다른 프레임의 접두사여야 한다(예:(i. 2 3) *"0 1 i. 2 3 4
왼쪽의 각 스칼라(0차원 항목)를 오른쪽의 각 벡터(1차원 항목)에 곱한다.이 동사를 평가하는 결과는 그 결과의 접두사 치수로 가장 긴 프레임의 치수를 가질 것이다.후행 결과 치수는 관련 셀에 적용된 동사의 결과일 것이다.변칙적인 경우, 인수가 충분한 차원이 없는 경우, 동사의 순위는 효과적으로 감소한다(결과에 영향을 줄 것이다).
예를 들어,
10 + 4 5 6 14 15 16
자, 동사+
서열이 0 0이고, 왼쪽 변수의 서열이 0이며, 오른쪽 변수의 서열이 1이다(차원이 3임).따라서 왼쪽 인수는 순위 0 프레임을 가지며 오른쪽 인수는 순위 1 프레임(차원 3)을 가진다.왼쪽 인수의 (비어 있는) 프레임은 오른쪽 인수의 프레임에 유효한 접미사이므로 이것은 유효한 연산이다.결과는 1등급, 차원은 3등급이다.
랭크 접속사
순위 접속사는 새로운 동사를 만들기 위해 동사 좌변수와 명사 우변수를 사용한다.명사 우변론은 단음위, 다음위 좌등위, 다음위 우등위를 각각 지정하는 최대 3개의 숫자로 구성된다.[8]
만약 오른쪽 주장이 두 숫자 밖에 되지 않는다면, 첫 번째 숫자는 왼쪽 논쟁의 순위, 두 번째 숫자는 오른쪽 논쟁의 순위라는 디아디치 사례의 대열로 간주된다.행렬의 각 벡터에 벡터를 추가하려면:
1 2 3 +"1 i. 3 3 1 3 5 4 6 8 7 9 11
만약 우리가 대신에 왼쪽의 각 스칼라를 오른쪽의 각 벡터에 더하고 싶다면, 우리는 다음과 같이 할 것이다.
1 2 3 +"0 i. 3 3 1 2 3 5 6 7 9 10 11
올바른 논거가 한 숫자일 경우 세 사건 모두의 서열로 간주된다.
올바른 주장이 동사라면 그 서열이 사용된다.예를 들어, 모두 동일한 동사를 도출한다.
* +"0 0 0 * +"0 0 * +"0 * +"+
순위 접속사에 대한 왼쪽 인수가 명사라면 상수 동사가 만들어진다.이 동사의 본문은 어떤 변수의 값을 무시하고 항상 그 명사라는 결과를 만들어 낸다.
참조
- ^ Slepak, Justin; Shivers, Olin; Manolios, Panagiotis. "An array-oriented language with static rank polymorphism" (PDF).
- ^ "Loopless Code I: Verbs Have Rank". Jsoftware.
- ^ "The mapcar Function". Free Software Foundation.
- ^ Bernecky, R. (December 1987). "An Introduction to Function Rank". APL88 Conference Proceedings, APL Quote Quad. Vol. 18.
- ^ "Controlling Verb Execution By Specifying a Rank". Jsoftware.
- ^ Rabanser, Stephan; Shchur, Oleksandr; Günnemann, Stephan (2017-11-29). "Introduction to Tensor Decompositions and their Applications in Machine Learning". arXiv:1711.10781 [stat.ML].
- ^ kgwgk; nabla9; azag0; tome; radarsat1 (2017-04-24). "HPTT: A High-Performance Tensor Transposition C++". Hacker News. Y Combinator. Retrieved 2019-12-10.
- ^ Burke, Chris (2014-09-12). "Essays: Rank". Jsoftware.
Abrams, P.S. (February 1970). "§II.E". An APL Machine (PDF). Stanford University (PhD).
백커스, J.W. 프로그래밍이 폰 노이만 스타일에서 해방될 수 있을까?기능적 스타일과 프로그램 대수 (https://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf), ACM의 통신, 제21권, 제8권, 1978-08; §11.3.3.
Bernecy, R, 기능 순위 소개(https://dl.acm.org/citation.cfm?id=55632), APL88 컨퍼런스 프로시저, APL 견적 쿼드, 제18권, 번호 2, 1987-12)
Bernecky, R.; Iverson, K.E. (6–8 October 1980). "Operators and Enclosed Arrays". Proceedings. 1980 APL Users Meeting. Jsoftware.
Bernecky, R.; Iverson, K.E.; McDonnell, E.E.; Metzger, R.C.; Schueler, J.H. (1983-05-02). "SATN 45: Language Extensions of May 1983". Jsoftware. I.P. Sharp Associates Limited.
Brown, J.A., The Principles of APL2 (http://www.softwarepreservation.org/projects/apl/Papers/PRINCIPLESOFAPL2), TR 03.247, IBM Santa Teresa Laboratory, San Jose, 1984-03; §20.0)
Dialog, Dialog APL 버전 14.0 릴리스 노트(http://www.dyalog.com/dyalog-version-140.htm), Dialog Limited, 2015).
Hui, R.K.W., Lank and Uniformity(http://www.jsoftware.com/papers/rank.htm), APL95 Conference Procedures, APL Quad, 제25권, Number 4, 1995-06).
Hui, R.K.W., Remembering Ken Iverson (https://keiapl.org/rhui/remember.htm), 2004-11)
Hui, R.K.W., Inner Product—An Old/New Problem (http://www.jsoftware.com/papers/innerproduct/ip.htm), British APL Association Conference 2009, 2009-06-08)
Iverson, K.E., Operators and Functions (http://www.jsoftware.com/papers/opfns.htm), Research Report #RC7091, IBM, 1978-04-26)
Iverson, K.E., A Privacy of APL (http://www.jsoftware.com/papers/APLDictionary.htm), APL Quad, Volume 18, Number 1, 1987-09).
Iverson, K.E., A Personal View of APL (http://www.jsoftware.com/papers/APLPersonalView1.htm), IBM Systems Journal, Volume 30, Number 4, 1991-12)
슬레팍, 저스틴; 쉬이버, 올린; 마놀리오스, 파나기오티스, 정적 계급 다형성을 가진 배열 지향 언어(http://www.ccs.neu.edu/home/jrslepak/typed-j.pdf)