在SML中将int转换为实数

时间:2019-03-29 00:23:08

标签: sml

SML的新手

我有以下代码返回列表的绝对值。我需要它的类型为int list-> real list。在将这段代码限制为一行的同时,将语句转换为实数的语句放在哪里?

val myabs = map(fn x => if x >= 0 then x else ~x) [1,~2, 3, ~4];

1 个答案:

答案 0 :(得分:1)

您使用Real.fromInt int 转换为 real

- Real.fromInt 42;
> val it = 42.0 : real

您可以通过List.map Real.fromInt int列表转换为真实列表

- List.map Real.fromInt [1, 2, 3];
> val it = [1.0, 2.0, 3.0] : real list

您可以使用Int.abs将整数转换为其绝对值:

- Int.abs ~42;
> val it = 42 : int

您可以结合使用这两个函数,因此都可以将整数转换为绝对值并将其转换为 real

- (Real.fromInt o Int.abs) ~42;
> val it = 42.0 : real

您可以使用List.map (Real.fromInt o Int.abs)对整个列表执行此操作:

- List.map (Real.fromInt o Int.abs) [~1, ~2, ~3];
> val it = [1.0, 2.0, 3.0] : real list

您可以将其表示为一个函数:

fun myabs xs = List.map (fn x => Real.fromInt (Int.abs x)) xs

您可以将此功能稍作缩短:

val myabs = List.map (fn x => Real.fromInt (Int.abs x))
val myabs = List.map (fn x => (Real.fromInt o Int.abs) x)
val myabs = List.map (Real.fromInt o Int.abs)

因此,唯一缺少的部分是:

  • 使用if x >= 0 then x else ~x代替Int.abs x
  • 要将x转换为实数,请使用Real.fromInt x
  • 要依次应用f (g x)(f o g) x等多个函数,例如数学。