f#将元素添加到最后位置

时间:2014-12-09 16:04:48

标签: list f# linked-list

  type Lista<'a> =
  | Data of 'a * Lista<'a> ref
  | Nil

  //let lista1 = Data(1,(ref Nil));;
  //let lista2 = Data(1,(ref (Data(2,(ref Nil)))));;
  let listaa = Data(1,(ref (Data(2,(ref (Data(3,ref Nil)))))));;

第一个位置添加

     let zad2c list elem =
         match list with
         | Data (x1,x2) -> Data(elem, ref( Data (x1, ref (!x2))))
         | Nil -> Data(elem,ref(Nil)) ;;


         zad2c listaa 4;;  

我的主要问题是在上面的结构中添加最后一个元素。 我也有删除最后一个元素的问题。我无法在互联网上找到任何有用的东西,只有java中的LinkedList。任何帮助甚至一些想法都会很棒;)

1 个答案:

答案 0 :(得分:3)

假设函数应该使用Lista<'a> ref作为输入,以及要追加的元素,并且追加函数应该改变列表而不是创建新列表:

let rec addLast el l =
    match !l with
    | Data(r, t) -> addLast el t
    | Nil -> l := Data(el, ref Nil)

let test = ref lista2
addLast 3 test
// Result:
// {contents = Data (1,{contents = Data (2,{contents = Data (3,{contents = Nil;});});});}

要了解它的作用,请从my previous answer to youmutable reference cells查找主题。