아래 함수에서 lp는 [0, a; 3, r; 7, p; 2, a]와 같은 형식입니다.OCaml에서 런 길이 디코딩
run_length_decode 함수는 lp를 취하고 위의 예에서 [r; r; r; p; p; p; p; p; p; p; a; a]를 반환합니다.
let rec run_length_decode lp = match (List.hd lp) with [] ->[]
| [0] -> rle_decode (List.tl (List.tl lp))
| _ -> (List.hd [List.tl]):: run_length_decode (List.hd (List.hd lp) -1)::(List.hd [List.tl])::(List.tl [List.tl])
그것은 몇 가지 오류가 말한다 (List.hd (List.hd LP) -1) 내가 머리와 감소 및을 할 위치 (List.hd [List.tl]) : :(List.tl [List.tl]) 여기에서 목록의 꼬리를 연결하여 감소 된 머리와 반복되도록하려는 경우.
아이디어는 (1) lp가 비어있는 경우 빈 종료를 반환하고, (2) lp의 헤드가 0이면 lp의 다음 섹션으로 건너 뜁니다. (3) lp의 헤드가 더 크면 0보다 작 으면 표시 할 문자를 인쇄하고 lp의 헤드가 감소되고 lp의 꼬리와 연결되는 수정 된 lp를 사용하여 RUNLENGTHDECODE를 재귀 적으로 호출합니다. 위의 코드가 작동하지 않습니다. 이슈가 뭐야? 어떻게 고치는 지?
코드가 작동하지 않는다고합니다. 문제가 정확히 무엇입니까? 로컬 이름은 OCaml에서 소문자로 시작해야합니다. 실제로'RUNLENGTHDECODE'라는 함수를 가질 수는 없습니다. 대문자를 많이 쓰면'RUNLENGTHDECODE'라고 이름을 붙일 수 있습니다. 개인적으로 나는'run_length_decode'와 같은 이름을 붙일 것입니다. –
https://ocaml.org/learn/tutorials/99problems.html#Decodearunlengthencodedlistmedium – ChriS