트리플 (d, k, l)을 취하는 함수 rec assoc (d, k, l)을 생성해야합니다. 여기서 l은 키 - 값 쌍의리스트입니다 [ (k1, v1); (k2, v2); ...] 그리고 k와 동일한 첫번째 ki를 찾는다. 그러한 ki가 발견되면 vi가 리턴됩니다. 그렇지 않으면, 기본값 d가 리턴됩니다. 그것은 여기에 내가 만든 기능이 OCaml에서리스트의 튜플과 일치해야 함
재귀 꼬리를 할 필요가 :let rec assoc (d,k,l) = match l with
|[]-> d
|(a,b)::t ->
if (a==k) then b
else assoc(d,k,t)
;;
내 논리가 여기 목록에서 튜플의 첫 번째 부분은 K 일치하는 경우 목록 리터의 머리를 가지고있다, 튜플의 두 번째 부분을 반환합니다. 그렇다면 각 요소를 검사 할 수 있도록 목록의 끝에 함수를 다시 호출하고 싶습니다. 일치하는 항목을 찾지 않고 목록 전체를 빈 목록으로 이동하면 d를 반환하고 싶습니다. 웬일인지, 나는 그것이 나에게 어떤 목록을 건든 상관없이 항상 d를 반환한다. 그 이유는 무엇 일 수 있습니다.
는 heres는 일부 샘플 출력은 제공해야합니다 :# assoc (-1,"jeff",[("sorin",85);("jeff",23);("moose",44)]);;
- : int = 23
# assoc (-1,"bob",[("sorin",85);("jeff",23);("moose",44)("margaret",99)]);;
- : int = -1
내 -1을 반환 모두
일반적으로 OCaml 프로그래머는 사용자가 가진 튜플의 모든 인수를 전달하지 않는다. 에서와 같이, 'rec assoc dk = function'을 선택하십시오. – nlucaroni