number_in_month exercise

前端 未结 4 1931
悲哀的现实
悲哀的现实 2021-01-17 04:17

I am fresh on SML and doing a homework by that. \"Write a function number_in_month that takes a list of dates and a month (i.e., an int) and returns how many dates in the li

相关标签:
4条回答
  • 2021-01-17 04:34

    I tried to fix it by myself and that was my solution:

    fun number_in_month (dias: (int*int*int) list,mes:int) = if null dias then 0 else if ((#2 (hd dias)) = mes) then let val flag = 1 + number_in_month(tl dias, mes) in flag end else number_in_month((tl dias),mes)

    I hope you can also use it!

    0 讨论(0)
  • 2021-01-17 04:36

    Your problem is endless recursion. Compiler can't get out of it because independ of result if..then..else you're running your function again Try this:

    fun number_in_month (dates: (int*int*int) list,month:int) = 
        if null dates
        then 0
        else if ((#2 (hd dates)) = month)
        then val flag=1 flag+number_in_month(tl dates, month) 
        else number_in_month((tl dates),month)
    
    0 讨论(0)
  • 2021-01-17 04:53

    You can't bind variables "that way". A binding of a variable is a declaration and thus cannot be done where an expression is expected.

    In this case you have to use a let-in-end expression

    fun foo x = 
      let 
        val a = 42 
      in 
        a*x
      end 
    
    0 讨论(0)
  • 2021-01-17 04:55

    The error message from REPL is confusing, but Jesper is right that you should use let-in-end expression, if you need assignment statement in functions. That will surely get you that error resolved.

    0 讨论(0)
提交回复
热议问题