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

如何获取可区分联合(DU)的下一个枚举项 实现机器人方向循环切换

方案1:纯可区分联合 + 模式匹配实现(推荐,可读性最高)

原可区分联合定义不需要修改,直接通过模式匹配穷举所有转向逻辑,天然处理循环边界:

type Direction = North | East | South | West

let turnRight current =
    match current with
    | North -> East
    | East -> South
    | South -> West
    | West -> North

比如当前方向为South时,第一次调用turnRight得到West,第二次调用直接得到North,不需要额外的边界判断,天然支持循环逻辑。
如果需要支持连续转多次,可以再加个批量处理的函数:

let rec turnRightMultiple times current =
    if times <= 0 then current
    else turnRightMultiple (times - 1) (turnRight current)

测试效果:turnRightMultiple 2 South 执行结果就是North,完全符合需求。

方案2:枚举类型 + 模运算实现(代码更简洁)

如果可以调整类型定义,把DU改成带整数映射的枚举类型,用模运算自动处理循环:

// 调整为带整数值的枚举类型
type Direction = 
    | North = 0
    | East = 1
    | South = 2
    | West = 3

let turnRight current =
    enum<Direction> ((int current + 1) % 4)

let turnRightMultiple times current =
    enum<Direction> ((int current + times) % 4)

测试效果:turnRightMultiple 2 South 计算逻辑为 (2 + 2) % 4 = 0,对应North。

两种方案都不需要额外写边界判断,就能实现方向的自动循环跳转。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:03