如何在SML列表中检查零

时间:2018-09-06 19:52:36

标签: sml

我正在努力创建一个函数,该函数将返回给定列表中每个元素(不包括零)的乘积。以下函数将正确返回列表的乘积,但不会排除零。

fun mult_nonzero(xs) = 
    case xs of [] => 0 
    | (x :: xs') => x * mult_nonzero(xs');

如何添加零校验?

2 个答案:

答案 0 :(得分:0)

您可以直接在function参数中执行模式匹配:

fun mult_nonzero [] = ...
  | mult_nonzero (x::xs) = ...

就像您可以匹配的参数是一个空列表或具有至少一个元素的列表一样,您也可以匹配第一个元素是特定的东西,但又引入了一个带有模式和主体的功能实例。我将其放在中间:

fun mult_nonzero [] = ...
  | mult_nonzero ... = ...
  | mult_nonzero (x::xs) = x * mult_nonzero xs

但是处理列表中的零并不是唯一的问题。

您的基本案例为0时,如果您进行一些简单的测试案例,就会发现一个问题:

val test_mult_nonzero_1 = mult_nonzero [5] = 5
val test_mult_nonzero_2 = mult_nonzero [5, 3] = 15

答案 1 :(得分:0)

您可以使用foldl(或foldr)。如果您不熟悉折纸,那么值得熟悉一下。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim day As String

    If Target.Row > 2 Then        
        day = Date
        Sheets("CFbase").Cells(Target.Row, Target.Column).Value = day
    End If

End Sub