4
저는 OCaml을 아직 처음 접했고 코드 최적화에 대한 도움을 받고 싶습니다.OCaml 목록 관련 오류
주어진 목록의 각 요소에 목록의 마지막 요소를 곱하려고합니다. 나는이 코드를 실행하면
(* Find the last element of a function *)
let rec lastE = function
| [] -> []
| [x] -> x
| _ :: t -> lastE t;;
(*multiply a list by the last element*)
let rec lmul list =
match list with
[] -> []
| hd::tl -> (hd *. (lastE tl)) :: lmul tl;;
내가이 오류 메시지가 얻을 :
Error: This expression has type float list but
an expression was expected of type 'a list list
나는 잠시 동안 공부하고 있어요,하지만에 어떤 도움이 여기에
내 코드의 조각이다 이 문제는 크게 감사 할 것입니다.
lastE에 대한 함수 서명을 보면 '목록 목록을 취하고'대신 '목록'을 반환한다는 것을 알 수 있습니다. 당신이 가진 첫 번째 오류의 원인입니다. List.rev를 사용할 수 있다면 마지막 요소를 매우 쉽게 얻을 수 있습니다. lmul에 대해 List.map을 대신 사용하는 것에 대해 생각해 보았습니까? –
오! List.rev 사용을 생각하지 않았습니다. 그것은 훨씬 더 단순하게 만듭니다. 나는 List.map에 익숙하지 않지만 나는 그 장면을 줄 것이다. –