有没有办法在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不是那么广泛使用的编程语言.
如何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) 假设我有一个很长的算法,我想任选地详细调试它.到目前为止,我只是添加了很多if verbose then printf "whatever"代码,但是如果我不想在详细模式中使用它,这会强制代码执行许多无用的测试.
有没有办法获得一个简单的条件编译,如果设置了一个标志,它可以忽略printf行?
例如,我可以通过使用C来做的事情 #IFDEF DEBUG printf .. #ENDIF
我是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"]
但它仍然似乎没有用.作为框架和语言的新手,我想知道我是否做错了什么.任何线索?
简而言之,我将发布一个用 OCaml 编写的应用程序,并且我计划通过源代码分发它。
问题是 OCaml 开发系统不是一个轻量级的东西,也不是那么常见的安装方式,所以我想以二进制方式为各种操作系统发布它。
当到达 Linux 时,问题出现了,因为我真的不知道哪种是编译和分发它的最佳方法。程序本身不依赖于任何东西(一切都是静态链接的),但是如何覆盖许多发行版?
我有一台采用amd64架构虚拟化的ubuntu服务器10,我用这台机器在Linux下测试程序,一切正常。当然,如果我尝试将二进制文件移动到 32 位 ubuntu,它就会停止工作,并且我无法尝试不同的发行版...是否有技巧来管理此类问题?(这似乎反复出现)
例如:
我正在考虑使用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)
当然,当我必须管理多种语言时,我会从文件中加载它们.
我问的是
Text.STRING1.text()).所以它应该是恒定的复杂性,或者它们可能只是在编译阶段被替换.谢谢
我想知道哪个是创建两个查找表的最佳方法,其中平方根和浮点值的立方根在范围内[0.0, 1.0).
我已经对代码进行了分析,发现这是一个非常强大的性能瓶颈(因为我需要计算每个代码的十分之几的值).然后我想起了查找表,并认为它们会帮助我提高性能.
由于我的值在一个很小的范围内,我正在考虑用步骤分割范围,比方说,0.0025(希望它足够)但我不确定哪种方法应该是检索它们的最有效方法.
我可以轻松填充查找表,但我需要一种方法来有效地获取给定浮点数的正确值(在任何步骤中都不会离散化).对此问题的任何建议或众所周知的方法?
我正在使用移动平台,只是为了指定.
提前致谢
我有两个JButtons叫做"左"和"右"."向左"按钮向左移动一个矩形对象,"向右"按钮向右移动矩形对象.我ActionListener在类中有一个作为单击任一按钮时的监听器.但是,我希望在单击每个动作时发生不同的操作.我如何区分,ActionListener点击之间?
我分配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)
为什么会这样?
我正在开发一种脚本语言,它可以编译自己的虚拟机,这是一个简单的脚本语言,可以处理某些数据,如点,向量,浮点数等等.内存单元以这种方式表示:
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)