OCaml/함수 프로그래밍에 익숙합니다. 비교적 간단한 다른 언어의 구현에 대해 혼란 스럽습니다. 나는 모든 도움을 사용할 수 있습니다.OCaml : 제어문을 사용하여 변수의 값을 유지하십시오.
주로 : 내가 작업하고있는 프로그램에서 특정 매개 변수를 기반으로 변수를 증가 또는 감소시킵니다. 여기에 내가 무엇을의 뭔가 담당자 : 그것은 아마도, 매번 인 것처럼 else
문이 촬영되지 않습니다 경우에도 때문에
let tot = ref 0 in
for i = 0 to s do
if test_num > 0 then
tot := !tot + other_num
else
tot := !tot - other_num
done;;
이것은 분명히 그것에 대해 이동하는 방법이 아니다, 코드의 역할 프로그램의 바닥에 가깝기 때문에? 나는 OCaml이 꽤 정교한 패턴 일치를 가지고 있음을 알고 있지만,이 수준의 coed 내에서 나는 이미 만든리스트에 대한 접근이 필요하다. 그리고 내가 이해할 수있는 한, 최상위 레벨 함수에서 그리스트에 접근 할 수 없다. 매개 변수로 모두 전달하지 않아도됩니다.
나는 이것이 잘못된 방법 일 것이라는 것을 알고 있지만, 나는 이것을 어떻게 관용적으로하는지 잘 모른다.
제안 사항? 감사.
편집 다음은보다 간결 예제 : 나는 max_mem
를 인쇄 할 때, 나는 19를 얻을 수 끝에
let ex_list = [1; -2; 3; -4] in
let max_mem = ref 0 in
let mem = ref 0 in
let() =
for i = 0 to 3 do
let transition = List.nth ex_list i in
if transition > 0 then (
mem := (!mem + 10);
) else
mem := (!mem - 1);
if (!mem > !max_mem) then (max_mem := !mem);
done;
print_int !max_mem; print_string "\n";
in !mem;
는,이 값이해야하지만 (0 + 1 - 10 + 10-1 = 18). 수학을 잘못하고 있습니까, 아니면 문제가 다른 곳에서 왔습니까?
! mem의 최대 값은 18입니다. 최종 값은 18입니다. 전혀 문제가 나타나지 않습니다. 루프 주변의 4 번 끝 부분의 값은 10, 9, 19, 18입니다. (측면 설명으로 이것이 질문의 본질이라면 이것은 훌륭한 예입니다.) –