2013-10-05 1 views
4

가정하자 나는 동사 v을 가지고 v=.>:@*:으로 정의 예를 들어, 나는 몇 가지 초기 값으로 nv을 적용하고에 대해 다음과 같이 벡터의 모든 중간 결과를 저장하려면 n=4 초기 값은 2반복 동사 애플리케이션 및 벡터에 저장 결과

2 5 26 677 458330

나는 동사를 적용하는 동안 내가 하나가 아마도 응용 프로그램을 n 번 할 ^:을 사용할 수 있습니다 알면서도, 벡터를 "확장"하는 방법을 잘 모르겠습니다.

도와주세요.

답변

2

내가 보통이를 위해 할 것은리스트의 꼬리 (또는 머리)에 v을 적용하고 목록에 결과를 추가 할 수 있습니다 :

v1 =: 3 :'y , v {: y' 

v1 1 
1 2 

v1 1 2 
1 2 5 

(v1^:5) 1 
1 2 5 26 677 458330 

에 따라 사용할 수있는이의 많은 변화가있다 원하는 효율, 데이터 구조 등이 포함됩니다.

+0

+1. 고맙습니다. 당신이 "이것의 많은 변이"를 말할 때, 기억할 수있는 몇 가지 다른 예를 들려 주시겠습니까? – Dick

+0

append (' 'y; v> {: y' '또는''y; ~ v> {. y ') 대신 꼬리 (''y, ~ v {. y'') ')와 많은, 더 많은. 그것은 진짜로 달라집니다. ... – Eelvex

7

J에는이 작업과 관련 작업이 내장 된 ^: ('power')가 있습니다./같이

v^:(<n) initial_value 

:

>:@*:^:(<1+4) 2 
2 5 26 677 458330 

이 재사용 가능한 동사 만들려면 그 오른쪽 인수가 박스 번호 (또는 숫자) 인 경우 당신이 찾고있는 전원의 특정 다양한입니다 (n 통해 추상화와 초기 값)

vv =: >:@*:@]^:(<@>:@[) 
    4 vv 2 
2 5 26 677 458330 

n이 초기 값 및,545,432 통해 추출 재사용 부사 (만들려면 10) :

V =: (@]) (^:(<@>:@[)) 
    4 >:@*: V 2 
2 5 26 677 458330 

또한 ^:에는 다른 맛이 있습니다. 예를 들어, 오른 쪽 인수가 박스 화되지 않은 숫자 (또는 숫자) 인 경우 중간 값 벡터를 작성하는 대신 N 번 함수를 적용하고 최종 값을 생성합니다.

또는 오른쪽 인수가 무한 경우 해당 고정 소수점에 함수가 적용됩니다. 또는이 두 가지 관측치를 결합하면 오른쪽 인수가 박스형이고 무한대이면 고정 소수점에 함수를 적용하여 중간 값의 벡터를 구축 할 수 있습니다. 그리고 다른 많은 멋진 트릭.


PS : 올바르게 입력을 생성한다 >:@*: 같이 @를 사용 *: 함수로 함수를 구성 >: 제곱을 더한. @ 때문에

>: 개별적 후자 동사 (증가)이 호출된다 #y*: 각각의 출력을 전달하는 조립 라인처럼 행동 정의된다. @ ("at") 대신 @: ("atop")을 사용하면 더 효율적으로 동일한 결과를 얻을 수 있습니다.작곡 연산자

, @: 더 조립 라인보다 호퍼 같다 : 완전히 *: 마무리 처리에 함께 모든 결과를 수집 기다린 한번에 >:로 전달.

J의 배열 지향 특성을 감안할 때, 경험 법칙은 "큰 생각"입니다. 즉, 각 프리미티브가 최대한 많은 데이터를 보도록하고 해석기가 세부 사항을 관리하게하십시오. J를 배우는 동안 뉘앙스를 다룰 때까지 블랭킷 규칙으로 "@ 대신 @ 사용"을 채택 할 가치가 있습니다.

+0

'f^: ( Eelvex