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

莫斯科ML/SML幻方代码报错:int*int与int*int*int类型冲突

解决SML/Moscow ML幻方代码中的类型冲突错误

你的问题出在函数参数结构不匹配:

  • place_number定义的第一个参数是三元组(i, j, num)
  • 递归调用时,next_position(i,j)返回二元组(new_i, new_j),你直接将其单独作为第一个参数传入,再跟num、m分开传递,导致函数收到的是「二元组 + int + 数组」,和定义的「三元组 + 数组」类型完全不匹配。

修正方法很简单:把next_position返回的新坐标和num打包成三元组,再传给place_number。推荐用let绑定让代码更清晰:

fun place_number (i, j, num) m =
  if Array.sub(Array.sub(m, i), j) = 0 then
    (Array.update(Array.sub(m, i), j, num); m)
  else
    let val (new_i, new_j) = next_position (i, j)
    in place_number (new_i, new_j, num) m
    end

如果想更紧凑,也可以直接拼接三元组(但会重复调用next_position,不推荐):

fun place_number (i, j, num) m =
  if Array.sub(Array.sub(m, i), j) = 0 then
    (Array.update(Array.sub(m, i), j, num); m)
  else place_number (#1 (next_position (i,j)), #2 (next_position (i,j)), num) m

你之前尝试的几种写法,核心问题都是没把新坐标和num组合成函数要求的三元组,所以不管怎么调整m的括号,都无法解决类型冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:09:58