2015-02-01 2 views
0

첫 번째 목록 요소의 수를 n으로하여 목록 xs를 2로 나눌 gencut (n, xs) 함수를 작성하려고합니다. 다음과 같이 바뀝니다.F #에서 보조 함수 선언 방법

let rec gencut(x, ys) = 
    let rec gencutaux (x, xs, ys) = // Here's my problem! 
     match (x, ys) with 
     | (0, []) -> (List.rev xs, ys) 
     | (x, []) -> (List.rev xs, ys) 
     | (0, ys) -> (List.rev xs, ys) 
     | (x, y :: ys) -> gencutaux (x - 1, y :: xs, ys) 
gencut(4, [1;2;3;4;5]);; 

그러나 두 번째 줄에는 실수가 있습니다. 콘솔을 실행하려고 할 때마다 콘솔에 다음과 같이 표시됩니다. "이 '다음'블록이 완료되지 않았습니다. 식을 기대하십시오." 이유가 무엇인지 모르거나이를 해결하기 위해 무엇을해야합니까. 모든 통찰력이 인정됩니다.

+2

'gencut'은 내부 함수'gencutaux'를 선언하고 있습니다. 뭔가를 반환해야합니다. (대부분'gencutaux'라고합니다.) – MarcinJuraszek

답변

-1

당신은 가능성이 gencutaux를 호출 할해야 그 어떤 이해가되지 않기 때문에

let rec gencut (x, ys) = 
    let rec gencutaux (x, xs, ys) = 
     match (x, ys) with 
     | (0, []) -> (List.rev xs, ys) 
     | (x, []) -> (List.rev xs, ys) 
     | (0, ys) -> (List.rev xs, ys) 
     | (x, y :: ys) -> gencutaux (x - 1, y :: xs, ys) 
    gencutaux (x, xs, []) 

당신은 변수 정의와 블록을 끝낼 수 없습니다.

+2

왜 편집을 되 돌렸는지 모르겠지만,'gencutaux'에 대한 호출이 잘못되었습니다. – ildjarn

+0

답변 해 주셔서 감사합니다. 그것은 효과가 있었지만, 왜 아직도 끝까지 gencutaux를 다시 호출해야합니까? – user3400351

+1

@ user3400351 호출됩니다. \ * again \ *가 아닙니다. 'let'은 호출하지 않는다고 정의한다. – rightfold