SML创建一个函数,查找不能从列表

时间:2017-09-07 16:53:47

标签: sml

写一个函数N表示 给定自然数r(示例中为2),自然数列表x1..xn, 和自然数列表q1..qm(n,m≥0),返回a 长度为n的列表,其第i个元素是自然列表 区间[xi-r,xi + r]中的数字不是 可以被q1..qm中的任何数字整除。

- N 2 [25, 50, 90, 11] [2,3,7]; val it = [[23,25] , [] , [89] , [11, 13]] : int list list

1 个答案:

答案 0 :(得分:0)

您可以按如下方式定义函数:

fun divisible (q::qs, x) = if (x mod q = 0) then true else divisible(qs, x)
  | divisible (nil, x) = false;


fun N r xs qs = let 
  val cs = map(fn x => List.tabulate(1+2*r, fn y => x + y - r))(xs);
in 
  map(fn bs => List.filter(fn x => not (divisible(qs,x))) (bs))(cs)
end;

对于给定的例子,它给出了:

- N 2  [25, 50, 90, 11] [2,3,7];
val it = [[23,25],[],[89],[11,13]] : int list list