2013-04-29 1 views
1

F #의 함수를 사용하여 연결된 목록의 크기 (요소 수)를 어떻게 확인할 수 있습니까?. 연결된 목록의 넷 크기

나는 다음과 같이 연결리스트의 크기를 찾을 싶습니다

type rNumber = Integer of int;; 
type lists = Nil | Link of (rNumber * (lists ref));; 

let list1 = Link(3, ref (Link(2), ref Nil); 
let list2 = Link(6, ref (Link(4), ref Nil); 
let list3 = Link(9, ref (Link(6), ref Nil); 
+1

표준 F # 목록을 사용하는 경우 'List.length' 만 사용할 수 있습니다. 정확히 무엇을 시도 했습니까? –

+0

불행히도 나는 그렇지 않다. 그것은 맞춤 링크 된 목록이다. –

+2

길이를 구현하려고 시도한 것은 무엇인가? 나는 숙제 인 것 같아서 대답을 포기하고 싶지 않다. 또한, 대답은'Link'가 정의 된 방법에 달려있어서 질문에 추가하는 것이 좋습니다. –

답변

3

문제는 표준 닷넷 목록에 대한 일치 만 알고있는 패턴이다. 당신의 Link 그냥 튜플 경우이 작동합니다

let rec length a = 
    match a with 
    |Link(_,ref Nil) 0 -> 1 
    |Link(_,t) -> 1+(length t) 

편집 :

지금 우리는 당신이 사용하기 때문에 이것은 !이 필요

let rec length a = 
    match a with 
    |Nil -> 0 
    |Link(_,t) -> 1+(length (!t)) 

트릭을 할 방법을 Link 작품을 알고 당신의 정의에서 특별히 기능적이지 않은 lists ref.

+0

흥미 롭다면, 나는이 논리를 여전히 논리적으로 이해하지 못하기 때문에 이것을 시도하고 그것이 어떻게 작동 하는지를 볼 것이다. –

+0

기본적으로 목록의 길이는 1 + 첫 번째 요소 뒤에 오는 요소의 수입니다. –

+0

자, 도와 줘서 고마워. 불행히도 그것은 나를 위해 작동하지 않았지만, 나는 그것을 알아 내기 위해 노력할 것입니다. F #은 아직 나에게 새롭기 때문에 나는 아직 그것에 익숙하지 않다. –