我最近一直在使用MemoCombinators和MemoTrie包,我试图记住一个接受树的函数(这实际上是一个伪装的DAG,因为有几个节点是共享的)。其形式为:
data Tree k a = Branch (Tree k a) (k, a) (Tree k a) | Leaf (k, a)
所以我想记住一个类型的函数(基于它的键):
Tree k a -> b
现在我有一个模糊的理解,这些记忆组合符是用来将你的函数f :: a -> a转换成a的惰性(未计算)值的结构,这样当你取出一个值时,它就已经被计算了。所以这对我的树来说不是问题--我需要以某种方式将它转换成一个由k索引的值
假设我有一个从给定参数创建字典的方法:
def newDict(a,b,c,d): # in reality this method is a bit more complex, I've just shortened for the sake of simplicity
return { "x": a,
"y": b,
"z": c,
"t": d }
我还有另一个方法,它在每次执行时调用newDict方法。因此,在最后,当我查看我的c
我正在用OCaml实现一个packrat解析器,根据,我的解析器应该接收表示语言语法的数据结构,并解析给定的符号序列。
我被记忆部分卡住了。原始论文使用Haskell的惰性计算来实现线性时间复杂度。我想在OCaml中做到这一点(通过懒惰来记忆),但不知道怎么做。
那么,如何在OCaml中通过惰性计算来记忆函数呢?
编辑:我知道懒惰评估是什么,以及如何在OCaml中利用它。问题是如何使用它来记忆函数。
编辑:我写的表示语法的数据结构是:
type ('a, 'b, 'c) expr =
| Empty of 'c
| Term of 'a * ('
您好,我在我的SQL Server Reporting Services 2008报表中放置了一个图形。我唯一的问题是,图形的自然行为是具有固定的宽度和高度,无论您的图形中有多少项。有时我在Y轴上只有5到8个项目,但有时我有20到25个项目。发生的情况是,由于固定的高度,具有较少项目的图形具有太多的垂直空间和较大的条形,而具有较多项目的图形被自动压缩到对它们而言较小的空间中。所以我需要的是根据图形的Y轴上有多少项目来动态地设置图形的高度。X轴不会展开,所以我不需要动态设置它。如何动态设置图形的高度?我可能需要为图形高度设置一个函数...任何帮助都将不胜感激。谢谢。
我理解这个程序如何显示getchar如何使用缓冲区复制和粘贴多个字符。
#include <stdio.h>
main()
{
int c;
c=getchar();
putchar(c);
c=getchar();
putchar(c);
}
但是下面的代码是如何实现的?
#include <stdio.h>
main()
{
int c;
c=getchar();
while (c!= EOF) // how does this program copy 12 and output 1
我已经定义了一个模块Comp,它的操作非常昂贵。在大多数情况下,对于Comp.t类型的值,可以计算int类型的值,该值可用于加速许多操作。因此,我定义了一个类型x,如下所示,它表示两种情况: 1)整数已计算2)否则
type x = A of (Comp.t, int) | B of Comp.t
已编写函数convert: x -> x来尝试计算Comp.t的整数,此整数可能不存在,此函数的开销也很大:
let convert (v: x): x =
match v with
| A _ -> v
| B c ->
try to calculate t
我有这样的代码:
for i in 1 .. 10 do
let (tree, interval) = time (fun () -> insert [12.; 6. + 1.0] exampletree 128.)
printfn "insertion time: %A" interval.TotalMilliseconds
()
其中时间函数定义为
let time f =
let start = DateTime.Now
let res = f ()
let finish = DateTime.Now
(res
在程序的任何阶段,我都希望对给定包中定义的结构的所有实例执行操作。为了做到这一点,我考虑开发一个收集这些实例的函数。但我什么都没找到。
为了澄清我的目标(跟随“@Muffin”和“@Volker”答案),我目前在每个包中的指针存储中进行此注册。这种方法存在两个问题,注册是一个普通的任务,而且容易出错。
为了说明我的情况,请考虑一个带有一个结构foo的包Foo。Foo有一个string字段Name。包还定义了两个Foo实例,声明为Foo1 & Foo2
package foo
type Foo struct {
Name string
}
var Foo1, Foo2 = F
我有这个计算,计算一个图形界面的位置,它是完全动态的,需要将每个项目放在不同的位置。计算和一旦分配工作完美,我的问题是,我需要分配计算的x和y轴的数字永久地为每个项目,以便我可以创建项目之间的链接。
这个公式最初可以分配计算并确保每个项目都有x和y位置,问题是,我想设置每个项目到给定的x和y轴,这样如果我想进一步向下创建一个链接,比如说item1连接到item2,它应该创建一个连接与item1和item2之间的一条线,线部分我可以做,只是想找到一种方法来保持每个项目的初始分配的x和y轴到每一项。
下面是它的工作原理。我有一个数据库,它告诉我哪个项目是连接到其他项目以及他们的位置。
It