这段代码不是为我编译的: let countDown = [5L .. ?1L .. 0L];;
我有一本书(第33页)说它应该归还:
val countDown : int list = [5L; 4L; 3L; 2L; 1L; 0L]
编译器错误:
Program.fs(42,24): error FS0010: Unexpected character '?' in expression
>
> let countDown = [5L .. ?1L .. 0L];;
let countDown = [5L .. ?1L .. 0L];;
-----------------------^
Run Code Online (Sandbox Code Playgroud)
这本书错了.但为什么?它是对语言的更新吗?实现这个目标的方法是什么?
编辑:问题是?从PDF复制的-字符不是字符.
这是C#,F#,IronPython和IronRuby集成的后续问题
为了使用Python的C/C++函数,SWIG是最简单的解决方案.反过来也可以使用Python C API,例如,如果我们有一个python函数,如下所示
def add(x,y):
return (x + 10*y)
我们可以在C中提出使用此python的包装器,如下所示.
double Add(double a, double b)
{
PyObject *X, *Y, *pValue, *pArgs;
double res;
pArgs = PyTuple_New(2);
X = Py_BuildValue("d", a);
Y = Py_BuildValue("d", b);
PyTuple_SetItem(pArgs, 0, X);
PyTuple_SetItem(pArgs, 1, Y);
pValue = PyEval_CallObject(pFunc, pArgs);
res = PyFloat_AsDouble(pValue);
Py_DECREF(X);
Py_DECREF(Y);
Py_DECREF(pArgs);
return res;
}
IronPython/C#甚至F#怎么样?
我在尝试在F#中实现自动微分时遇到了一些问题.我认为问题在于评估不是"懒惰".
这是我的代码:
type Diff =
{d : double; df : Diff}
static member (+) (x : Diff, y : Diff) =
{d = x.d + y.d; df = x.df + y.df}
static member (-) (x : Diff, y : Diff) =
{d = x.d - y.d; df = x.df - y.df}
static member (*) (x : Diff, a : double) =
{d = x.d * a; df = x.df * a}
static member (*) (x : Diff, y : Diff) …Run Code Online (Sandbox Code Playgroud) 我在F#中写了以下内容:
let fib x =
match x with
| 0 -> 0
| 1 -> 1
| n+2 -> fib n + fib (n+1)
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到一个编译器错误,说明我在意外的地方使用了一个中缀操作符.除了使用通配符之外,有没有办法在F#中表达我的意图?
我期待写一个递归函数来合并到F#中的整数列表
我从这开始,但不知道接下来该做什么.
let rec merge xs ys =
match xs with
| [] -> ys
|
let li = [1;3;5;7;]
let ll = [2;4;5;8;]
Run Code Online (Sandbox Code Playgroud) 有没有办法使用jQuery调用f#库而不必将其包装到Web服务方法中?
我在VS2010中尝试了以下代码:
open System.Security.Cryptography
let rsaTest1 =
let ecKey = [|0uy..143uy|] // junk data for testing
let ecKeyMod = ecKey.[8..8+128-1]
let ecKeyExp = ecKey.[136..136+8-1]
let rsa = RSAParameters(Modulus = ecKeyMod, Exponent = ecKeyExp)
rsa
let rsaTest2 =
let ecKey = [|0uy..143uy|] // junk data for testing
let rsa = RSAParameters(Modulus = ecKey.[8..8+128-1], Exponent = ecKey.[136..136+8-1])
rsa
Run Code Online (Sandbox Code Playgroud)
如果我突出显示所有代码并将其发送到F#Interactive(Alt + Enter),则rsaTest1可以工作,但rsaTest2会给出错误消息,
System.NullReferenceException: Object reference not set to an instance of an object.
at <StartupCode$FSI_0004>.$FSI_0004.main@() in P:\proj\Tachograph\Project\CompuTachTest\CompuTachTest\rsaTest.fsx:line 16
Run Code Online (Sandbox Code Playgroud)
但是,如果我将rsaTest2从值更改为函数并调用它,
let rsaTest2 () =
let …Run Code Online (Sandbox Code Playgroud) 我想将图像像素延迟加载到3维整数数组.例如,它看起来像这样:
for i=0 to Width
for j=0 to Height
let point=image.GetPixel(i,j)
pixels.[0,i,j] <- point.R
pixels.[1,i,j] <- point.G
pixels.[2,i,j] <- point.B
Run Code Online (Sandbox Code Playgroud)
如何以懒惰的方式制作?
我写了两个版本的代码.第一个按预期工作并打印"嗨".第二个给我一个错误,"阻止这个让未完成"
第一版
#light
let samplefn() =
let z = 2
let z = z * 2
printfn "hi"
samplefn()
Run Code Online (Sandbox Code Playgroud)
第二版
#light
let samplefn() =
let z = 2
let z = z * 2
samplefn()
Run Code Online (Sandbox Code Playgroud)
唯一的区别是第二版中没有printfn.我使用Visual Studio 2010作为我的IDE.我对F#很新,但这个错误对我来说似乎很奇怪.我想我错过了一些非常重要的概念.请解释.
编辑:此外,如果我在函数外执行此操作,即使使用第一个版本的代码,我也会收到错误.
#light
let z = 2
let z = z * 2
printfn "Error: Duplicate definition of value z"
Run Code Online (Sandbox Code Playgroud) 这是我的代码片段:
let targetMeasure (usesPercent:Nullable<byte>) value =
match usesPercent.Value with
| 0 -> sprintf "$%A" value
| _ -> sprintf "%A%%" value
Run Code Online (Sandbox Code Playgroud)
尝试将"usesPercent"与0匹配,但0必须是一个字节.这总是让我在F#中感到困惑.我超越了可以为空的东西,但那时的值不是同一类型.我该如何解决这个问题?