首页 > 解决方案 > 如何检查sml列表中的零

问题描述

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

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

如何添加零检查?

标签: sml

解决方案


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

fun mult_nonzero([]) = 0
  | mult_nonzero(xs) = foldl (fn (a, b) => if a = 0 then b else a*b) 1 xs

推荐阅读