2011-10-28 5 views
3

입력 모듈로 3을 반환하는 mod3 함수를 만들려고하지만 구문이 잘못되었습니다. 구문이 왜 문서의 double 예와 다른지는 알 수 없습니다.함수 및 모듈러스에 대한 J 구문

$ jconsole 
    double =: * & 2 
    double 1 
2 
    double 2 
4 
    double 3 
6 
    mod3 =: 3 | & 
|syntax error 
| mod3=: 3|& 

답변

5

.

double1= *&2  NB. new verb "times by 2" 
    double2=: 2&* NB. new verb "2 times" 
    double1 4 
8 
    double2 4 
8 
( |)는 교환 법칙이 성립하지

그러나 residule 확실 당신을해야합니다 귀하의 경우 있도록 : 곱셈은 교환 법칙이 성립하기 때문에 다음 있도록 왼쪽 또는 오른쪽 인수로 2를 해결 동등 여부는 문제가되지 않습니다 원하는 결과 (3으로 나눈 수)의 나머지를 얻을 수 |의 왼쪽 인수로/채권합니다 (3를 해결.

modulo3=: 3&| NB. new verb "remainder after divison by 3" 
    modulox=: |&3 NB. new verb "remainder of 3 divided by" 
    modulo3 7 
1 
    modulox 7 
3 
+0

'|'가 왼쪽 인수와 오른쪽 인수를 취하는 경우 왜'3 | 2 '는 자체적으로 작동하지만, 함수를 정의 할 때 postix'3 &'을 사용해야합니다. 일관성이 없습니다. – mcandre

+0

솔직히 나는 당신이 명확하지 않은 것을 이해하기 위해 고심하고 있습니다. 나는 당신이 J가 아닌 일부 구문 규칙에 맞을 것으로 기대하고 있으며 J의 패러다임을 이해하지 못하게하고있는 것으로 생각됩니다. '|'가 사용할 왼쪽 인자를 지정해야하기 때문에 왼쪽 인자를 바인드하기 위해'&'연산자를 사용합니다. 또 다른 방법은 fork를 사용하고'mod3 = : 3 | ]' – Tikkanz

+0

나는 접두사/후위/중절 용어에 대한 나의 경험이 제한되어 있다는 점을 이해하기 위해 고심하고있는 이유를 추가해야한다. '3 &'가 "postfix"인 이유를 설명 할 수 있습니까? '&'의 관점에서 볼 때 그 문장은 중위어라고 주장 할 수는 없습니까? – Tikkanz

0

J하는 주로 접두사 언어가,이 구문을 사용하지만, 메일 링리스트는이 버전을 사용 말한다 이유는 확실하지 않다, 그것은 작동합니다. & (결합)이 그 본질적으로 "고정"좌측 (또는 우측) 인수 새로운 동사를 만드는 동사 명사에 결합하는 데 사용되는

mod3 =: 3 & | 
0

점을, 나는 그것을보고, 당신은 이항있을 때이다 동사, 그리고 그것에 대한 논증을 맺으면 모나드 동사가됩니다. 모나드 동사 항상 y (J 용어) 또는 오른쪽에서 그들의 주장을 가지고 있습니다.

예 : ^ & 3] 4 ]가 하나의 숫자로 간주되지 않는다는 3 4 이렇게 분리한다. 나는 동사 동사, 힘으로 시작했고, x를 y의 힘으로 가져 갔다. 바인딩을 추가함으로써, 나는 정의에 따라 y 힘을 제 3의 힘으로 가져가는 모나 딕 동사를 만들었습니다.

3&^ 4 
81 

이것은 본질적으로 모범 동사가 "y 힘에 3을 가라"는 것을 제외하고는 본질적으로 같은 예입니다.

두 가지 예 (더 간결한 + :)가 보여 주려했던 것이 정확하게 우리가 보여주는 것입니다. 즉, 본드로 모나드 동사로 변환되는 두 동사는 항상 하나의 인수로 실행해야합니다. 첫 번째 논의가 어느쪽에 묶여 있든지 관계 없습니다.

표시되지 않는 것은 교환 할 수없는 동사의 경우 원래 인수를 바인딩하는 쪽이 중요하다는 것입니다. 하지만 이제는 알 수 있습니다. :-)