我需要编写一个函数,该函数类型的输入(int * int) list
和整数的打印对。 这个功能应该利用另一个函数printGenList(需要一个函数f和一个列表L和适用F到列表中的每个元素递归),它的代码,我这样写的 -
fun printGenList f l =
if NULL l
then ()
else ( (f (HD l) ); printGenList (f) (TL l) );
并提供了一个匿名函数(FN ... => ...结构),将做适当的美化打印。
我需要编写一个函数,该函数类型的输入(int * int) list
和整数的打印对。 这个功能应该利用另一个函数printGenList(需要一个函数f和一个列表L和适用F到列表中的每个元素递归),它的代码,我这样写的 -
fun printGenList f l =
if NULL l
then ()
else ( (f (HD l) ); printGenList (f) (TL l) );
并提供了一个匿名函数(FN ... => ...结构),将做适当的美化打印。
类型签名告诉你有对的整数的列表。 一对整数的的一个例子是(4,1)
然后对列表是[(a,b),(c,d),...]
并没有如你试过,一对整数名单。
我敢肯定你已经熟悉了(x::xs)
符号,因为你似乎明白列表到一定程度。 如果我们将比赛拖入对我们能做到这样的: ((n,m)::xs)
这种模式将结合n和m为相应的整数和xs到列表的其余部分。 然后递归很简单:
fun pInts [] = ()
| pInts ((n,m)::xs) = print ("(" ^ Int.toString n ^ ", " Int.toString m ^ ")";
pInts xs
从这个来收集重要的是,你可以在一个单一的模式绑定几个变量,并在你的函数中使用它们。 你甚至可以,如果你确定你在列表中有一个以上的元素,同时结合几个要素:
fun pairs [] = []
| pairs [x] = []
| pairs (x::y::xs) = (x,y) :: pairs xs
你应该看一看元组事实上,你必须与以下签名定义功能:
fn : (int * int) list -> unit
因此,该函数将是这样的:
fun pr(lst :(int * int) list) : unit =
case lst of
[] => ()
|(a,b) :: xs => let
val out = Int.toString a ^ Int.toString b
in
print(out);
pr xs
end
我希望得到您的基本思想。 尽量提高打印格式!