You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SML中编写vmProduct函数实现行向量与矩阵的乘法运算

SML实现行向量与矩阵乘法函数

需求说明

实现vmProduct函数,完成长度为n的行向量与n行m列矩阵的乘法运算,返回长度为m的结果向量。
示例:输入([1,2,3], [[1,1], [2,1], [3,1]])时,返回结果为[14, 6]。

可复用工具函数

现有两个已经实现的工具函数可直接调用:

(* 两个等长向量逐位相加 *)
fun vectorAdd(nil, _) = nil
  | vectorAdd(_, nil) = nil
  | vectorAdd(a1::first_list, a2::second_list) = 
    (a1 + a2) :: vectorAdd(first_list, second_list);

(* 标量与向量相乘,标量乘向量每一个元素 *)
fun svProduct(x, y) = 
  map (fn (item) => item * x) y;

vmProduct函数实现

fun vmProduct([], _) = []
  | vmProduct(_, []) = []
  | vmProduct(v::vs, m::ms) = vectorAdd(svProduct(v, m), vmProduct(vs, ms));

实现逻辑说明

  • 边界处理:如果输入向量为空,或者输入矩阵为空,直接返回空列表
  • 递归逻辑:
    1. 取出向量首元素v、矩阵首行m,调用svProduct计算标量乘结果
    2. 递归计算剩余向量vs和剩余矩阵ms的乘积
    3. 调用vectorAdd将上述两个结果向量逐位相加,得到当前递归层的返回值
  • 整体逻辑和行向量乘矩阵的数学计算规则完全对应:每个向量元素乘对应矩阵行,所有结果按位求和

测试验证

调用示例代码:

val test_result = vmProduct([1,2,3], [[1,1], [2,1], [3,1]]);

运行后test_result的值为[14,6],符合需求要求。

内容的提问来源于stack exchange,提问作者asworeya shrestha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:45:03