2013-04-29 3 views
1

Как я могу найти размер (количество элементов) связанного списка с помощью функции в F #?.Net размер связанного списка

Я хотел бы найти размер связанных списков, как следующее:

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

Итак, что вы пытались реализовать в длину? Я предполагаю, что это домашняя работа, поэтому я не хочу просто отдать ответ. Кроме того, ответ будет зависеть от того, как определяется «Ссылка», поэтому было бы неплохо добавить это к вопросу. –

ответ

3

Проблема заключается в определении соответствия образцов только знает о списке Standard .Net. Если ваш Link только кортеж это будет работать

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

EDIT:

Теперь мы знаем, как Link работы это следует сделать трюк

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

! требуется потому, что вы используете lists ref в вашем определении, которое не особенно функционально.

+0

Интересно, я попробую это и посмотрю, как это работает, потому что я до сих пор не понимаю логику этого. –

+0

В основном длина списка 1 + количество элементов после первого элемента –

+0

Хорошо, спасибо за вашу помощь. К сожалению, это не сработало для меня, но я постараюсь понять это. F # по-прежнему новичок для меня, поэтому я пока не слишком доволен. –

Смежные вопросы