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

Haskell解释器实现随机分支执行与不合规结果重试机制

Haskell自定义程序解释器Selection分支随机执行与重试实现问题

已完成开发模块

  • 定义核心类型HVal、HStatement
  • 实现Do、Skip、Print、Eval等基础语句的evalStatement_求值逻辑
  • 完成带守卫条件的If条件分支、Selection选择结构的Parser解析逻辑

待实现的执行规则

需求为实现可循环重试的随机分支选择逻辑:

  • 从Selection结构包含的、由「If守卫条件+关联执行语句」组成的分支列表中,仅对守卫值为真的分支随机选取条目执行
  • 若选中分支的执行结果不符合预设要求,不终止程序,重新执行随机选支流程,直到选出的分支执行结果满足要求为止

过往实现尝试与现存缺陷

竞速方案

最初计划基于Async库的race函数实现多分支竞速求值:只对守卫通过的分支并行触发求值,取最先完成的分支执行结果返回。但该方案受IO monad的约束,实现复杂度远超预期,最终放弃。

随机索引方案的现有问题

目前落地的随机索引选支逻辑,通过自实现的randIdx函数结合unsafePerformIO生成随机索引选取分支,选中分支执行后若得到不符合预期的单位值(),就递归触发Selection的重新求值。但该实现存在明显bug:

  • 运行带有偶数筛选打印逻辑的示例程序时,程序完全无输出且无法终止
  • 若将Selection的求值逻辑临时替换为traverse_顺序执行所有分支,程序可正常运行,但完全失去了随机选支的效果
  • 之前调试过一版简化的Selection随机执行逻辑,虽然可以让程序正常终止,但执行结果极不稳定:跑1-10范围内偶数筛选打印的测试样例时,部分运行会打印全部偶数,部分运行仅输出单个数字6,始终达不到「选到不合规分支就重选,直到拿到理想执行结果」的预期

当前需要匹配该场景的正确随机分支执行与重试逻辑实现方案。


内容的提问来源于stack exchange,提问作者Mr.Bloom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 22:15:01