gpt4 book ai didi

compiler-errors - SMLNJ错误: type constructor list given 0 arguments, wants 1

转载 作者:行者123 更新时间:2023-12-02 10:46:15 25 4
gpt4 key购买 nike

我是标准ML的新手,找不到解决此错误的方法:

fun without_i (num:int) (lista:list) (result:list) (lcm_wi:real)=
if (num>=N-1) then result
else
let
val a = (gcd(lista,lcm_wi))
val b = List.nth(lista,num)
in
without_i (num+1) lista ((lcm_wi)::result) ((b/a)*lcm_wi)
end
;

val before_i_rev = without_i 0 Rate [] 1.0;

错误:给定0个参数的类型构造函数列表需要1。

如何解决此错误?
另外,有没有一种方法可以将REAL转换为INT?

最佳答案

How can I fix this error?


  • 通过Moscow ML传递此程序时,它会产生一个可读性更高的错误:
    ! Toplevel input:
    ! fun without_i (num:int) (lista:list) (result:list) (lcm_wi:real)=
    ! ^^^^
    ! Arity mismatch!

    在这里,list是类型构造函数,它期望将类型作为其前面的参数,例如(lista : real list)。在SML中,没有类型参数就不能引用类型构造函数。诸如alist之类的值不能仅具有list类型。

    在某些情况下,您可能想引用不带参数但又不能带参数的类型构造函数。例如,如果要定义类型别名type stack = list,则仍然必须写出类型参数:
    type 'a stack = 'a list
  • 您不需要显式的类型注释;您可以使用类型推断:
    fun without_i num lista result lcm_wi =
    if num >= N-1 then result
    else
    let
    val a = gcd(lista, lcm_wi)
    val b = List.nth(lista, num)
    in
    without_i (num+1) lista ((lcm_wi)::result) ((b/a)*lcm_wi)
    end

    (在此示例中,括号和空格也已重新格式化。)
  • 我真的不确定当您输入的不是整数时,gcdlcm是什么意思。看来gcd (lista, lcm_wi)接受了real listreal。这可能不是通常已知的gcd类型的int * int -> int函数。
  • 如果您对numN的意图是处理lista的每个元素,并且一次仅使用lista的一个元素并将其丢弃,那么您还可以对此参数执行列表递归:
    fun without_i lista =
    let fun loop [] result lcm_wi = [] (* or [lcm_wi]? *)
    | loop (b::bs) result lcm_wi =
    let val a = gcd (lista, lcm_wi)
    in loop bs (lcm_wi::result) ((b/a)*lcm_wi)
    end
    in loop lista [] 1.0 end

    通过将lista传递到一次删除一个loopb,您可以递归地引用完整的lista和每个b

  • Is there a way to convert a real to an int?



    您可以通过多种方式将实数转换为整数: floor , ceil , trunc , round

    这完全取决于您打算对小数部分进行的处理。

    关于compiler-errors - SMLNJ错误: type constructor list given 0 arguments, wants 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49735919/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com