2010-11-28 4 views
1

ocaml의 if-else 루프에서 여러 작업을 수행 할 수 있습니까?중첩 된 경우 - else 문 -ocaml

나는 다음을 수행하려고 :

let rec appendtolist n list b = 

    let f x = 

     if (b < 0) then x 

     else if (b == 0) then ((appendtocode n (List.hd list)) (b-1)) (* THIS LINE *) 

     else ((appendtocode n (List.hd list)) :: (appendtolist n (List.tl list) (b-1))) 

    in 

    f list 

    ;; 

나는 것을 나는 대담하게 라인에 컴파일러가 불평을 얻을 :이 표현은 함수가 아닙니다

을, 그것을 적용 할 수 없습니다

b==0 일 때 내 기능을 호출하고 또한 감소 값이 b 인 경우.

이 경우 어떻게해야합니까?

알려 주시기 바랍니다.

감사합니다.

답변

2

기본적으로 이것은 before과 같은 오류입니다.

당신은 하지 함수 인 값을 반환

appendtocode n (List.hd list) 

을 평가하고

. 그런 다음 b-1을 인자로 사용하려고 시도하지만 함수가 아니기 때문에 그렇게 할 수 없습니다.

b == 0 일 때 내 함수를 호출하고 b의 값을 감소 시키길 원합니다.

감소량 b 누구를 위해? bappendtolist 함수에 대한 인수이므로 appendtolist을 반복적으로 호출하면 경우에 수행중인 내용 인 b에 대한 새 인수를 제공 할 수 있습니다. 하지만 then 케이스에서는 appendtolist으로 전화하지 않습니다. appendtocodeappendtocode에만 전화를 걸면 세 번째 인수 인 b이 없습니다. 따라서 그것을 전달하면 b-1은 단순히 의미가 없습니다.

내 생각에 b-1을 제거하면 프로그램이 올바르게 작동합니다.

추신 :이 문제는 완전히 중첩 된 if과 관련이 없습니다.

+0

appendtocode는 문자열을 반환합니다. 나는 그것을 부르고 b의 값을 또한 감소시키고 싶다. – JJunior

+0

gr8! 방금 b-1을 제거하고 appendlist를 다시 호출했습니다. gr8 일했다! 고마워요 :) 혼란에 빠져서 죄송합니다. 아직도이 언어를 배우려고 :) – JJunior

1

빠른 추측 :

표현식은 함수가 아닙니다

(appendtocode n (List.hd list)) 

로 반환 뭔가를 제공하고, 따라서 당신은 무엇을 어떤 그것에 (B-1)의 값을 적용 할 수 없습니다 너는하려고하는거야. 확인하려면 appendtocode 유형을 찾아보고 두세 개의 카 트리 인수를 취할 수 있는지 확인하십시오.

+0

appendtode에 b-1을 적용하고 싶지 않습니다. 이 함수에서 b-1을 감소시키고 싶습니다. – JJunior