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。任何帮助甚至一些想法都会很棒;)
答案 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 you和mutable reference cells查找主题。