【发布时间】:2014-04-29 11:52:31
【问题描述】:
我正在尝试在打字球拍中创建一个 HOF,这将使我能够表达这个想法,“在评估时,掷骰子并选择要应用的程序”。
目前,我正在处理以下内容:
(: odds-on ((Any * -> Any) (Any * -> Any) Real -> (Any * -> Any)))
(define (odds-on choice alternative odds)
(cond [(< (random) odds) choice]
[else alternative]))
我的想法是我可以这样使用它:
> ((odds-on do-a-common-thing do-a-rarer-thing .75) 'x '(a b c) (set z))
其中do-a-common-thing 和do-a-rarer-thing 在别处定义,并且可能具有任意参数数量和类型。这样大约 3/4 的时间会调用第一个函数,而 1/4 的时间会调用第二个函数。
但是我左右都遇到了类型检查和 arity 问题...根据文档,我需要 heterogenous rest arguments,但我没有很好地遵循文档,不是类型系统的学者...我只是希望能够指定两个函数和一个概率,并在运行时确定调用的函数!
而且,总的来说,也许宏/语法形式会是一种更明智的方式来创建这种效果?从界面设计的角度来看,这种能力正是我在程序中所需要的,但我不知道如何用静态类型来实现它......但我希望静态类型能够帮助处理程序的其他部分.
【问题讨论】:
标签: types scheme racket typed-racket