写一个函数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
答案 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