최근에 ocaml에서 코딩을 시작했으며이 프로그래밍 언어는 반환 할 함수를 정의 할 때 유용합니다. 2 개의리스트를 매개 변수로 사용하는 함수 (오름차순 및 int 유형의 요소)를 작성하고 처음 두리스트의 모든 요소를 포함하는리스트를 오름차순으로 리턴하는 함수를 작성하려고합니다.ocaml 함수가 '목록 대신 unit을 반환하도록 요청했습니다.
let inter l1 l2 =
let rec aux l1 l2 l3=
if List.hd l1<List.hd l2 then aux (List.tl l1) l2 (List.hd l1 :: l3)
else (if List.hd l1>List.hd l2 then aux l1 (List.tl l2) (List.hd l2::l3)
else (if l1 = [] then List.fold_left (fun x y -> y::x) l3 l2
else if l2=[] then List.fold_left (fun x y -> y::x) l3 l1
))
in List.rev (aux l1 l2 []);;
을하지만 그것을 컴파일 할 때, 그것은 나에게이 오류 메시지가 반환 : 나는 함수를 호출 할 때
Error: This expression has type 'a list
but an expression was expected of type unit
이, 그냥 작동을 여기
은 지금까지 그럭저럭 무엇인가 좋아,하지만 그것은 예상대로 작동하지만, 나를 귀찮게하는 것은 오류 메시지이다. 왜 그런지 알 겠어?추신 : 저는 Emacs - Tuareg Mode를 텍스트 편집기와 컴파일러로 사용합니다.
스타일 문제에 동의 해주세요. 초보자에게 List.hd를 사용하지 말 것을 권장합니다. 일단 패턴 사용에 익숙해지면,이 규칙을 재검토하고 실제로는 더 나은 선택 일 때'List.hd'를 사용하는 것이 좋습니다. – Stefan
설명해 주셔서 감사합니다. 패턴 매칭에 대해서는 알고 있지만 C 스타일 프로그래밍에서 코드를 논리적으로 작성하는 것이 더 쉽다는 것을 알았습니다. 현재 프로그래밍 스타일보다 작성하는 코드가 적기 때문에 익숙해 지려고 노력할 것입니다. – Stevie