SML-使用map返回组合结果
我有以下职能:SML-使用map返回组合结果,sml,smlnj,Sml,Smlnj,我有以下职能: fun IsDivisible(t, t2) = if t mod t2 > 0 then true else false; fun IsDivisibleFilter(ts, t) = List.filter(fn x => IsDivisible(x, t)) ts; fun IsDivisibleMap(ts, ts2) = map(fn x => IsDivisibleFilter(ts, x)) ts2; IsDivisibleMap-获取两个i
fun IsDivisible(t, t2) = if t mod t2 > 0 then true else false;
fun IsDivisibleFilter(ts, t) = List.filter(fn x => IsDivisible(x, t)) ts;
fun IsDivisibleMap(ts, ts2) = map(fn x => IsDivisibleFilter(ts, x)) ts2;
IsDivisibleMap-获取两个int、ts和ts2列表,并返回一个包含ts元素的列表,这些ts元素不可被ts2中的任何元素分割
例如,IsDivisible映射([10,11,12,13,14],[3,5,7])应该返回[11,13]
我现在使用的方法是返回一个列表列表,其中每个列表都是ts2中每个数字的结果
例如,IsDivisible Map([10,11,12,13,14],[3,5,7])正在返回[10,11,13,14][11,12,13,14][10,11,12,13]
在仍然尽可能使用map和filter的情况下,如何返回我正在查找的结果?术语方面存在各种问题;我想首先谈谈这些问题 首先,名称
IsDivisibleMap
不是一个好名称,原因有二:
IsIndivisibleFilter
。我还将名称IsDivisible
更改为IsIndivisible
其次,在您对函数的描述中,您说它应该返回一个列表,其中包含ts
的那些元素,这些元素是ts2
中的任何元素所不可分割的。但是,我认为您的意思是:“返回一个列表,其中包含ts
的那些元素,这些元素是ts2
中所有元素不可分割的。”
现在,回到主要问题。对于
ts
的每个元素,我们需要检查它是否被ts2
的所有元素所不可分割。有一个很好的函数叫做List.all
,它检查列表中的所有元素是否满足某个谓词。因此,要检查ts
的特定元素t
,我们可以执行以下操作:
fun IsIndivisibleByAll (t, ts2) =
List.all (fn t2 => IsIndivisible (t, t2)) ts2
现在我们可以通过根据该谓词进行过滤来实现原始函数:
fun IsIndivisibleFilter (ts, ts2) =
List.filter (fn t => IsIndivisibleByAll (t, ts2)) ts
最后,我想提到,您可以用适当的方法来清理这个实现。以下是我将如何实施它:
fun IsIndivisible t t2 = (t mod t2 > 0)
fun IsIndivisibleByAll ts2 t = List.all (IsIndivisible t) ts2
fun IsIndivisibleFilter (ts, ts2) = List.filter (IsIndivisibleByAll ts2) ts
这里有各种各样的术语问题;我想首先谈谈这些问题 首先,名称
IsDivisibleMap
不是一个好名称,原因有二:
IsIndivisibleFilter
。我还将名称IsDivisible
更改为IsIndivisible
其次,在您对函数的描述中,您说它应该返回一个列表,其中包含ts
的那些元素,这些元素是ts2
中的任何元素所不可分割的。但是,我认为您的意思是:“返回一个列表,其中包含ts
的那些元素,这些元素是ts2
中所有元素不可分割的。”
现在,回到主要问题。对于
ts
的每个元素,我们需要检查它是否被ts2
的所有元素所不可分割。有一个很好的函数叫做List.all
,它检查列表中的所有元素是否满足某个谓词。因此,要检查ts
的特定元素t
,我们可以执行以下操作:
fun IsIndivisibleByAll (t, ts2) =
List.all (fn t2 => IsIndivisible (t, t2)) ts2
现在我们可以通过根据该谓词进行过滤来实现原始函数:
fun IsIndivisibleFilter (ts, ts2) =
List.filter (fn t => IsIndivisibleByAll (t, ts2)) ts
最后,我想提到的是,您可以通过适当的咖喱来清理这个实现。以下是我将如何实施它:
fun IsIndivisible t t2 = (t mod t2 > 0)
fun IsIndivisibleByAll ts2 t = List.all (IsIndivisible t) ts2
fun IsIndivisibleFilter (ts, ts2) = List.filter (IsIndivisibleByAll ts2) ts
好极了这正是我所需要的。谢谢,太棒了!这正是我所需要的。非常感谢。