1

나는 J를 배울 시도하고 내가 사용하고있는이 책은이 이 J 함수가 실행되지 않는 이유는 무엇입니까?

 
function =: 3:0 
    function statements 

그래서 난이 형식을 따라 접는 코드를 쓴 모나드 함수를 정의하는 적절한 방법 말한다. 내가 구문 대신 스택 오류의 3

h=:>:@[email protected]<[email protected]: :[: NB. gets all integers less than half of the input :[: forces error if used dyadicly 
d=:(0&=|)~ h :[: NB. gets list where if one is set that index from h was a factor of the input y :[: forces error if used dyadicly 
p=: 3:0 NB. tells us p is a monadic function 
    t =: d y 
    a =: i. 1 
    while. 1<#t 
     if. t~:0 
     a =: a, #t 
     end. 
     t=: _1 }. t NB. found first mistake wrong bracket but fixing that doesn't fix it 
    end. 
    a*1 
) 

NB. p gets a list of all integers that are factors of y 
p 4 
| syntax error 
| p 4 
p 
3 
NB. h and d run fine 
h 4 
    1 2 
h 7 
    1 2 3 
d 7 
    1 0 0 
d 4 
    1 1 
+0

J는 함수형 프로그래밍 언어가 아닙니다. 이것은 함수 수준의 프로그래밍 언어입니다. (차이점에 대한 논의는 함수 수준 프로그래밍에 관한 Wikipedia 기사를 참조하십시오.) –

답변

2

먼저 와 같은 구문을 사용합니다. 즉, 명칭이 "0"인 모나드 "3:"이됩니다. 그것은 당신이 원하는 것이 아닙니다. 정의에 대해서는 ":"다이어그램을 사용하기 때문에 3과 공백을 두어 구분해야합니다.

두 번째로 ta은 로컬 변수이므로 =: 대신 =.을 사용해야합니다. 이전

d =: 0 = h | [    NB. does h y divide y 
p =: d # h     NB. select d y from h y 

같은 기능을하지만, 빨리 명확하고 :

여러 부품을 단순화 할 수있다.

+0

아, 고맙습니다. 기능 프로그래밍에 익숙하지 않고 J에 아주 새로운 것입니다. 내가 원했던 것을 생각해 낼만큼 오래 걸렸습니다. 더 빠른 길을 찾았습니다. [모나드는 자기 모나드 맞습니까? –

+0

J는 "함수 수준 프로그래밍"을 지원하지만 "함수 프로그래밍"을 지원하지 않습니다. 모나드 문맥에서,'['는 신원 함수 (인자를 반환)입니다. 2 진 문맥에서는'x'를 생성하고'y'를 무시합니다 (왼쪽 인자를 반환합니다). 여기서 내가주는 정의는 동사를 새로운 동사로 결합하기위한 후크와 포크를 사용합니다. – ephemient

0

을 내가 입력을 호출 할 때이 구문 오류를 던지는 이유를 말해하지만 난 그냥 페이지를 호출하는 경우가 반환 수 있습니까 종류를 알아 냈어 3 : 0을 사용하는 대신 모나드 정의에서 오류가 발생합니다. 나는 아직도 몇 가지 결함을 해결해야하지만 진전을 이루고 있습니다.

h =:>:@[email protected]<[email protected]: 
d =:(0&[email protected]|)~ h 
p =: monad define 
t =: d y 
a =: i.0 
while. 1<#t do. 
    if. {:t~:0 do. 
     a=:a, #t 
    end. 
    t=: _1 }. t 
end. 
a 
) 

내 최근 시도는 가치 평가가 끝나기에 좋은 거래입니다. 아직 실패 이유는 모르지만 곧 얻을 수 있습니다. 나는 그것이 필요한 것을 잊고 있다고 생각했습니다. 조건을 추가하면 조건이 모두 수정됩니다.

관련 문제