【问题标题】:Converting int to real in SML在 SML 中将 int 转换为 real
【发布时间】:2019-04-02 18:01:22
【问题描述】:

SML 的新手

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

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

【问题讨论】:

    标签: sml


    【解决方案1】:

    您使用 Real.fromIntint 转换为 real

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

    你可以通过List.map Real.fromIntint list转换成real list

    - 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.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)
    

    所以唯一缺少的部分是:

    • 请使用Int.abs x,而不是if x >= 0 then x else ~x
    • 要将x 转换为真实值,请使用Real.fromInt x
    • 按顺序应用多个函数,f (g x)(f o g) x,如数学。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多