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

使用#0和#1析构函数定义SML函数时出现语法错误求助

问题解答:修复元组析构函数实现函数的语法错误

首先看原始的模式匹配实现函数:

fun f (x,0) = x
  | f (0,y) = y
  | f (x,y) = x+y;

你用if-else改写的f1可以正常运行:

fun f1(x, y) =
  if y = 0 then x
  else if x = 0 then y
  else x + y;

但你尝试用元组析构函数实现的f2出现语法错误,错误根源是Standard ML的元组索引从1开始,不存在#0这个析构函数,这就是报错的核心原因。

错误的f2代码:

fun f2(arg) =
  if #0(arg) = 0 then #1(arg)
  else if #1(arg) = 0 then #0(arg)
  else #0(arg) + #1(arg);

对应的错误信息:

Error: syntax error: deleting  INT0 LPAREN

修复后的正确f2代码,只需把#0替换为#1,#1替换为#2即可:

fun f2(arg) =
  if #1(arg) = 0 then #2(arg)
  else if #2(arg) = 0 then #1(arg)
  else #1(arg) + #2(arg);

如果想提升代码可读性,可以先把元组的两个元素绑定到变量,再进行判断:

fun f2(arg) =
  let
    val x = #1 arg
    val y = #2 arg
  in
    if y = 0 then x
    else if x = 0 then y
    else x + y
  end;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:25:24