我有一个非常大的决策树.它使用如下:
-- once per application start
t :: Tree
t = buildDecisionTree
-- done several times
makeDecision :: Something -> Decision
makeDecision something = search t something
Run Code Online (Sandbox Code Playgroud)
此决策树太大而无法放入内存中.但是,由于懒惰的评估,它只是部分评估.
问题是,有些情况下会尝试所有可能的决策,导致整个树被评估.这不会终止,但也不应该导致内存溢出.此外,如果此过程中止,则内存使用量不会减少,因为仍然会评估一个巨大的子树.
解决方案是每次makeDecision调用树时重新评估树,但这会失去缓存决策的好处并显着减慢速度makeDecision.
我想去中学课程.特别是在我的应用程序中,在树中使用公共路径前缀做连续决策是很常见的.因此,我想缓存上次使用的路径但删除其他路径,导致它们在下次使用时重新评估.我怎么能在Haskell中做到这一点?
我需要计算foo n = maximumBy (comparing p) [1..n],哪里p :: Int -> Int慢.但我知道,p n < n所有的n > 0,想利用这一点来此计算加速方式如下:我计算p x了x年初n到1,记忆当前最大.一旦达到x小于或等于当前最大值,我知道这个最大值必须是全局值,我就完成了.
所以我的尝试看起来像这样:
foo n = go (0, 0) n where
go (c, _) 1 = c
go (c, c') !x = if c' >= x then c else go (c2, c'2) (x-1) where
x' = p x
(c2, c'2) = if c' >= x' then (c, …Run Code Online (Sandbox Code Playgroud) 我想A -> Bool用A的一些镜头创建一个函数.例如:
data A = A { _foo :: Int, _bar :: Int }
makeLenses ''A
l :: [A]
l' = filter (\a -> a^.foo > 100) l
Run Code Online (Sandbox Code Playgroud)
过滤谓词看起来有点块状.((>100).(^.foo))并没有好多少.没有镜头,我会用((>100) . foo).
有没有一种很好的方法来创建这样的谓词lens?理想情况下,它也允许谓词(\a -> a^.foo > 100 && a^.bar < 50).
简单来说,我正在寻找一种显示方式Behaviour (UI Element).
我的实际用例是显示一个可以过滤的表.所以我有一个函数tableElement :: String -> UI Element(String参数是过滤条件)和一个输入字段filterElement :: Element,它代表过滤器.对我来说,最自然的方式就是这样:
bFilter <- stepper "" (valueChange filterElement)
displaySomehow (fmap tableElement bFilter)
Run Code Online (Sandbox Code Playgroud)
这也是在Elm中完成的方式.
到目前为止sink children,我发现的最接近的是使用,但这只适用于[Element]而不适用[UI Element].另外,我必须使用虚拟元素作为父元素或与其余子元素混在一起.
用threepenny-gui实现类似这样的东西最好的方法是什么?
TypeScript 似乎在推断类型保护的联合类型方面存在问题。例如,考虑一个将类型保护数组与以下签名组合的函数
function combine<T>(guards: ((x: any) => x is T)[]): (x: any) => x is T
Run Code Online (Sandbox Code Playgroud)
并考虑以下类型护板带A和B具有不同特性的
function isA(x: any): x is A
function isB(x: any): x is B
Run Code Online (Sandbox Code Playgroud)
现在我希望combine([isA, isB])能够工作并拥有推断的类型,(x: any) => x is A | B但我收到一个错误,指出类型的参数((x: any) => x is A | (x: any) => x is B)[]不可分配给类型的参数(x: any) => x is A,这意味着T推断为A而不是A | B.
当T明确指定时,即combine<A|B>([isA, isB]) …
我需要构建一个包含交叉引用的语法,它可能无效,即指向一个不存在的目标.包含此类引用的文件不应产生错误,而应仅产生警告.发电机将像特殊情况一样处理这个问题.
我怎么能用XText做到这一点?