小编Jac*_*ack的帖子

OCaml前向声明

有没有办法在OCaml中进行C风格的前向声明?

我的问题是我有两个互相引用的变体:

type path_formula =
  [ `Next of state_formula
  | `Until of (state_formula * state_formula)
  | `UntilB of (state_formula * int * state_formula)  
  ]

type state_formula = 
    [ `True | `False
    | `Not of state_formula
    | `And of (state_formula * state_formula)
    | `Or of (state_formula * state_formula)
    | `Imply of (state_formula * state_formula)
    | `Label of string
    | `Prob` of (boundf * path_formula)
    | `Expc` of (boundi * formula)
    ]
Run Code Online (Sandbox Code Playgroud)

所以这两种类型都必须知道另一种类型..我在Google上搜索它但不幸的是OCaml不是那么广泛使用的编程语言.

ocaml types forward-declaration

5
推荐指数
1
解决办法
1404
查看次数

OCaml中的递归集

如何Set在OCaml中定义一个可以包含其类型元素的?

为了解释这个问题,我有很多数据类型的类型声明

type value =
  Nil
| Int of int
| Float of float
| Complex of Complex.t
| String of string
| Regexp of regexp
| Char of char
| Bool of bool
| Range of (int*int) list
| Tuple of value array
| Lambda of code
| Set of ValueSet.t (* this isn't allowed in my case since module is declared later*)
Run Code Online (Sandbox Code Playgroud)

另外,我ValueSet在同一个文件中声明了一个具体的模块:

module ValueSet = Set.Make(struct type t = value let compare = …
Run Code Online (Sandbox Code Playgroud)

recursion ocaml module

5
推荐指数
1
解决办法
407
查看次数

OCaml中的条件编译

假设我有一个很长的算法,我想任选地详细调试它.到目前为止,我只是添加了很多if verbose then printf "whatever"代码,但是如果我不想在详细模式中使用它,这会强制代码执行许多无用的测试.

有没有办法获得一个简单的条件编译,如果设置了一个标志,它可以忽略printf行?

例如,我可以通过使用C来做的事情 #IFDEF DEBUG printf .. #ENDIF

ocaml conditional-compilation

5
推荐指数
1
解决办法
842
查看次数

Sinatra找不到Ruby 1.9.2-p0的观点

我是Ruby语言的新手(到目前为止我是用Groovy + Grails开发的)但是因为我很好奇它,我想在Ruby 1.9.2-p0上尝试Sinatra.

我有一个简单的网站,其中包含/mywebpage2个文件:

# blog.rb
get '/' do
  'Hello World!'
end

get '/impossible' do
  haml :index
end
Run Code Online (Sandbox Code Playgroud)

#config.ru
path = File.expand_path "../", __FILE__

$LOAD_PATH << (File.expand_path ".") + "/views"

require 'haml'
require 'sinatra'
require "#{path}/blog"

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

然后在同一个文件夹中我有一个/views/包含的文件夹index.haml.

我尝试运行服务器,rackup -p8080但当我尝试得到/impossible以下错误时:

Errno::ENOENT at /impossible
No such file or directory - /home/jack/mywebpage/<internal:lib/rubygems/views/index.haml
Run Code Online (Sandbox Code Playgroud)

通过互联网搜索,似乎这可能是由"."引起的.没有被包括在内$LOAD_PATH所以我试图添加它或直接添加视图,./views以便实际上$LOAD_PATH.inspect给我正确的路径:..., "/home/jack/mywebpage/views"]

但它仍然似乎没有用.作为框架和语言的新手,我想知道我是否做错了什么.任何线索?

ruby haml path sinatra

5
推荐指数
1
解决办法
3030
查看次数

为许多 Linux 发行版进行编译

简而言之,我将发布一个用 OCaml 编写的应用程序,并且我计划通过源代码分发它。

问题是 OCaml 开发系统不是一个轻量级的东西,也不是那么常见的安装方式,所以我想以二进制方式为各种操作系统发布它。

  • Windows 没有问题,因为我可以通过 cygwin 编译它并使用所需的 dll 分发它
  • OS X 也不是问题,因为我可以轻松地编译和分发它(没有我尝试过的外部依赖项)

当到达 Linux 时,问题出现了,因为我真的不知道哪种是编译和分发它的最佳方法。程序本身不依赖于任何东西(一切都是静态链接的),但是如何覆盖许多发行版?

我有一台采用amd64架构虚拟化的ubuntu服务器10,我用这台机器在Linux下测试程序,一切正常。当然,如果我尝试将二进制文件移动到 32 位 ubuntu,它就会停止工作,并且我无法尝试不同的发行版...是否有技巧来管理此类问题?(这似乎反复出现)

例如:

  • 我可以从同一台机器编译 32 位和 64 位吗?
  • 在 ubuntu 下编译的二进制文件也可以在其他发行版上运行吗?
  • 当想要覆盖尽可能多的发行版时,我应该考虑哪些“分支”?

linux distribution cross-compiling

5
推荐指数
1
解决办法
3634
查看次数

Java枚举的性能

我正在考虑使用enum类型来管理我正在开发的Java游戏中的i18n,但我对使用具有大量元素的枚举(我认为数千个)时可能出现的性能问题感到好奇.

其实我正在尝试这样的事情:

public enum Text {
  STRING1,
  STRING2,
  STRING3;

  public String text() {
    return text;
  }

  public String setText() {
    this.text = text;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后加载它们我可以填写字段:

static
{
  Text.STRING1.setText("My localized string1"); 
  Text.STRING2.setText("My localized string2"); 
  Text.STRING3.setText("My localized string3"); 
}
Run Code Online (Sandbox Code Playgroud)

当然,当我必须管理多种语言时,我会从文件中加载它们.

我问的是

  • 是一个为每个元素分配的(除字符串之外的)obect?(我想是的,因为枚举是用对象实现的)
  • 如何从枚举中检索出正确的元素?它在编译时是静态的吗?(我的意思是在我使用的某个地方Text.STRING1.text()).所以它应该是恒定的复杂性,或者它们可能只是在编译阶段被替换.
  • 一般来说,这是一个好方法还是我应该期待别的什么?

谢谢

java enums internationalization

5
推荐指数
3
解决办法
6952
查看次数

方形/立方根查找表

我想知道哪个是创建两个查找表的最佳方法,其中平方根和浮点值的立方根在范围内[0.0, 1.0).

我已经对代码进行了分析,发现这是一个非常强大的性能瓶颈(因为我需要计算每个代码的十分之几的值).然后我想起了查找表,并认为它们会帮助我提高性能.

由于我的值在一个很小的范围内,我正在考虑用步骤分割范围,比方说,0.0025(希望它足够)但我不确定哪种方法应该是检索它们的最有效方法.

我可以轻松填充查找表,但我需要一种方法来有效地获取给定浮点数的正确值(在任何步骤中都不会离散化).对此问题的任何建议或众所周知的方法?

我正在使用移动平台,只是为了指定.

提前致谢

c++ floating-point lookup-tables

5
推荐指数
1
解决办法
1536
查看次数

一个动作监听器,两个JButtons

我有两个JButtons叫做"左"和"右"."向左"按钮向左移动一个矩形对象,"向右"按钮向右移动矩形对象.我ActionListener在类中有一个作为单击任一按钮时的监听器.但是,我希望在单击每个动作时发生不同的操作.我如何区分,ActionListener点击之间?

java swing awt jbutton actionlistener

5
推荐指数
2
解决办法
1万
查看次数

为什么可以打印小于DBL_MIN的双数?

我分配0.4543543234343654632452452525254e-323给一个double变量a并打印它,虽然它小于DBL_MIN,但它仍然可以分配和打印.

DBL_MAX: 1.79769e+308
FLT_MAX: 3.40282e+38
DBL_MIN: 2.22507e-308
FLT_MIN: 1.17549e-38
a: 4.94066e-324
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c++ double range ieee-754

5
推荐指数
1
解决办法
258
查看次数

使用JIT设计虚拟机

我正在开发一种脚本语言,它可以编译自己的虚拟机,这是一个简单的脚本语言,可以处理某些数据,如,向量,浮点数等等.内存单元以这种方式表示:

struct memory_cell
{
    u32 id;
    u8 type;

    union
    {
        u8 b; /* boolean */
        double f; /* float */
        struct { double x, y, z; } v; /* vector */
        struct { double r, g, b; } c; /* color */
        struct { double r, g, b; } cw; /* color weight */
        struct { double x, y, z; } p; /* point variable */
        struct { u16 length; memory_cell **cells; } l; …
Run Code Online (Sandbox Code Playgroud)

c++ vm-implementation

4
推荐指数
2
解决办法
3102
查看次数