我正在为大学做作业,并且webassign门户面临一个奇怪的问题(您将代码放入其中,并且可以检查一切是否正常)。
我们需要编写一个将矩阵相乘的函数。这是通过向量乘法,矩阵多向量,矩阵多矩阵逐步完成的。
我的代码在smlnj解释器上运行,但不在webassign中运行:
fun v_v_mult [] _ = 0.0
| v_v_mult _ [] = 0.0
| v_v_mult (r::rs) (c::cs) = r*c + v_v_mult rs cs
fun m_v_mult [] _ = []
| m_v_mult _ [] = []
| m_v_mult (rv::rvs) cs = v_v_mult rv cs :: m_v_mult rvs cs
因此,在我的REPL中一切正常,但是webassign告诉我
m_v_mult [[]] []
引发异常。我无法在REPL中重现异常,因为上面的代码按预期工作。
与空列表匹配的模式是否需要特殊设置?我搜索了stackoverflow,但没有发现任何提示。您能给我一个提示(或链接或关键词,以便更好地搜索)吗?
谢谢, 约臣
答案 0 :(得分:0)
好的,伙计们,答案有些奇怪。
fun m_v_mult [] _ = []
| m_v_mult (rv::rvs) cs = v_v_mult rv cs :: m_v_mult rvs cs
即第二行已删除。
这是因为m_v_mult [[]] []在第一个参数中没有空矩阵,但是有一行的矩阵,它是空的。因此,结果应该是一个包含一个元素的向量,其中包括超过0个数字的和。因此,结果应为加法的标识,即0。最后一种情况得到此结果,该情况称为v_v_mult,在这种情况下返回0。
在没有老师提示的情况下,我不会来解决这个问题的。
感谢您帮助思考该问题,并告诉我至少我的编码方式是正确的。