关于OCaml中zipper类型insert函数ins调用逻辑的疑问
OCaml中zipper类型insert函数的调用逻辑解析
你完全误解了参数传递的逻辑——这里并没有把整个zipper传给ins函数。
先看insert的参数定义:((l, n): 'a zipper)是OCaml的模式匹配解构语法,它直接把传入的zipper(本质是(列表, 整数)的元组)拆成了两个独立变量:
l:对应原zipper里的列表部分n:对应原zipper里的整数部分
所以ins l n这行代码里,传给ins的是两个独立参数:
l是列表,对应ins的第一个参数lln是整数,对应ins的第二个参数nn
再拆解下整个流程:
ins函数的作用是在列表ll的第nn个位置(从0开始计数)插入元素a- 调用
ins l n后,会得到插入新元素后的新列表 insert函数最终返回的新zipper,就是这个新列表和原zipper里的整数n(也就是保持插入的位置标记不变)
举个实际例子:
如果执行insert ([1;2;3], 1) 4,解构后l = [1;2;3]、n=1,ins l n会把4插入到列表的第1位,得到[1;4;2;3],最终返回的zipper是([1;4;2;3], 1)。
内容的提问来源于stack exchange,提问作者v_head
相关产品推荐
相关产品推荐

