Functional programming 在标准ML列表中查找中间元素
我试图在SML中找到列表的中间元素,而不使用表单list.whatever的任何预实现函数。我可以使用一个函数,它获取两个相同的列表,递归地调用自己,从一个列表中删除一个项目,从另一个列表中删除两个项目,直到第二个列表为空。第一个列表的头将是原始列表的中间元素。我是SML新手,无法找到从列表中删除第一项或列表中删除前两项的方法。任何帮助都会很好。您可以使用来确定列表的形状并命名其组件:Functional programming 在标准ML列表中查找中间元素,functional-programming,sml,smlnj,Functional Programming,Sml,Smlnj,我试图在SML中找到列表的中间元素,而不使用表单list.whatever的任何预实现函数。我可以使用一个函数,它获取两个相同的列表,递归地调用自己,从一个列表中删除一个项目,从另一个列表中删除两个项目,直到第二个列表为空。第一个列表的头将是原始列表的中间元素。我是SML新手,无法找到从列表中删除第一项或列表中删除前两项的方法。任何帮助都会很好。您可以使用来确定列表的形状并命名其组件: fun middle xs = let fun middle_rec (_ :: []) (x
fun middle xs = let
fun middle_rec (_ :: []) (x :: _) = SOME x
| middle_rec (_ :: _ :: []) (x :: _) = SOME x
| middle_rec (_ :: _ :: xs) (_ :: ys) = middle_rec xs ys
| middle_rec _ _ = NONE
in middle_rec xs xs
end
以下是SML/NJ解释器的一些示例输出:
- middle ([] : int list);
val it = NONE : int list
- middle [1];
val it = SOME 1 : int list
- middle [1,2];
val it = SOME 1 : int list
- middle [1,2,3,4,5,6,7];
val it = SOME 4 : int list
- middle [1,2,3,4,5,6,7,8];
val it = SOME 4 : int list