假设我有以下功能.
let rec fib n =
match n with
| 1 | 2 -> 1
| n -> fib(n-1) + fib(n-2)
Run Code Online (Sandbox Code Playgroud)
如何将此代码编译为dll,以便从C#中使用它?
我同时使用mono(在Mac OS X中)和Visual Studio 2010.
我添加以下内容来创建命名空间.
namespace MyMath.Core module public Process=
和fsc --target:library facto.fs给了我facto.dll.
使用此代码的C#代码如下.
using System;
using MyMath.Core;
class TestFSharp {
public static void Main() {
int val = MyMath.Core.Process.fib(10);
Console.WriteLine(val);
}
}
Run Code Online (Sandbox Code Playgroud)
dmcs /r:facto.dll testf.cs给了我tesetf.exe.
我有Execution environment references were not checked for '...' because no environment descriptions are installed.错误.

我想我需要安装环境描述(http://wiki.eclipse.org/Execution_Environment_Descriptions)导致此错误的org.eclipse.jdt.core项目.
如何在eclipse中安装环境描述?
正如在删除左递归中所解释的,有两种方法可以删除左递归.
人们通常用什么来移除(没有)ANTLR的左递归?我使用flex/bison进行解析器,但我需要使用ANTLR.我唯一担心的是使用ANTLR(或普通的LL解析器)是去除递归.
我用以下语法做了一些实验.
E -> E + T|T T -> T * F|F F -> INT | ( E )
离开递归后,我得到以下一个
E -> TE' E' -> null | + TE' T -> FT' T' -> null | * FT'
我可以提出以下ANTLR表示.尽管如此,它相对简单明了,似乎没有左递归的语法应该是更好的方法.
grammar T;
options {
language=Python;
}
start returns [value]
: e {$value = $e.value};
e returns [value]
: t ep
{
$value = $t.value
if $ep.value != None:
$value += $ep.value
}
; … 有没有好的代码测量工具?
我发现代码测量非常有用和有趣,但我认为我只能使用测量工具支付1美元/年.
我想可能有一个/可以的工具
我有一个A类,可以通过两种不同的方式生成.
第一种方法将文件路径作为输入从XML文件解析以获取listA和listB.第二种方法有两个列表.
我可以想到两种方法来实现多个构造函数.你怎么看?通常Python人员使用什么方法来处理这种情况?
class A():
def __init__(self, arg1, arg2 = None):
if isinstance(arg1, str):
...
elif isinstance(arg1, list):
...
a = A("abc")
b = A([1,2,3],[4,5,6])
Run Code Online (Sandbox Code Playgroud)
class A2():
def __init__(self):
pass
def genFromPath(self, path):
...
def genFromList(self, list1, list2):
...
a = A2()
a.genFromPath("abc")
b = A2()
b.genFromList([1,2,3],[4,5,6])
Run Code Online (Sandbox Code Playgroud) 有没有办法使用命令行启动不同的emacs模式?例如,是否可以按如下方式运行emacs?
emacs --org-mode # to start orgmode
emacs --python-mode # to start python mode
Run Code Online (Sandbox Code Playgroud)
之后我可以运行emacs来输入'Mx org-mode',但我想知道我是否可以启动不同的模式.
我有NSDate* day1和NSDate* day2.如何NSDate* day3从第1天开始仅复制年/月/日,从第2天复制每小时/分钟/秒?
正如本MSDN文章中所解释的,当使用.NET Reflection API InvokeMember时,由于元数据的缓存,第一次调用比后续调用花费更多时间.
当我在不使用Reflection的情况下测试直接方法调用时,我也看到了对Mono和.NET 4的类似效果.
第一个数字是操作的结果," - "后面的第二个数字是以ms为单位的此操作所花费的时间.我使用'< - '标记来标识第一个方法调用.
300 - 0.192 <--
300 - 0.004
300 - 0.004
-100 - 0.096 <--
-100 - 0.004
-100 - 0.004
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我可以理解第一次调用可能比较慢,但速度慢50倍并不是我的预期.
附件是获得此结果的源代码.
namespace MyClass
{
public class Calculator
{
public int Value1 {get; set;}
public int Value2 {get; set;}
public Calculator()
{
Value1 = 100;
Value2 = 200;
}
public int Add(int val1, int val2)
{
Value1 = val1; Value2 = val2;
return Value1 + …Run Code Online (Sandbox Code Playgroud) 使用C++/C,最简单的调试方法是使用cout/printf打印出控制台的内容.
WPF/C#中的等效方法是什么?
我想过使用MessageBox(),但WPF似乎不支持这个功能.我也考虑过使用日志功能,但我不知道它比printf/cout复杂得多.
我可以在Visual Studio中使用断点,即便如此,我需要一些命令来设置断点.
if (ABC())
{
// What command should be here to set a break point?
}
Run Code Online (Sandbox Code Playgroud) 我想在Java中使用构造函数链.例如,对于第一个构造函数,我有一个字符串作为参数,并在我从参数字符串创建一个对象时调用第二个构造函数.
public class IMethodFinder {
public IMethodFinder(String projectName, String methodName,
int numberOfParameters) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
IJavaProject javaProject = JavaCore.create(project);
this(javaProject, methodName, numberOfParameters);
}
public IMethodFinder(IJavaProject javaProject, String methodName,
int numberOfParameters) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误"构造函数调用必须是构造函数中的第一个语句"错误.

我制作了一个在两个构造函数之间共享的公共代码,但我不确定这是绕过该问题的唯一解决方案.
public class IMethodFinder {
public IMethodFinder(IJavaProject javaProject, String methodName,
int numberOfParameters) {
dosomething(javaProject, methodName, numberOfParameters);
}
public IMethodFinder(String projectName, String methodName,
int numberOfParameters) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
IJavaProject javaProject = JavaCore.create(project);
dosomething(javaProject, methodName, numberOfParameters);
}
private void dosomething(IJavaProject javaProject, …Run Code Online (Sandbox Code Playgroud) c# ×3
constructor ×2
java ×2
.net ×1
antlr ×1
build ×1
cocoa ×1
code-metrics ×1
debugging ×1
dll ×1
eclipse ×1
emacs ×1
environment ×1
f# ×1
macos ×1
mode ×1
mono ×1
nsdate ×1
objective-c ×1
performance ×1
python ×1
wpf ×1