Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 以F为单位的增量值#_F# - Fatal编程技术网

F# 以F为单位的增量值#

F# 以F为单位的增量值#,f#,F#,也许这件事太简单了,但我在网上找不到任何答案 我正在尝试增加F#中的值(如C#中的count++)。 我不想使用“可变”选项, 我只是想看一个例子,F#中的增量函数应该是什么样子。 如何使用它。 < P> C++中的“递增一个值”的概念在使用可变值或使用可变引用单元格(本质上是存储可变值的简单对象)时才有意义。如果您有一个可变参考单元格,则可以使用incr功能: let count = ref 0 incr count 如果使用可变变量,则没有用于该变量的内置函数,需要编写count+1: l

也许这件事太简单了,但我在网上找不到任何答案
我正在尝试增加F#中的值(如C#中的
count++
)。
我不想使用“可变”选项, 我只是想看一个例子,F#中的增量函数应该是什么样子。
如何使用它。

< P> C++中的“递增一个值”的概念在使用可变值或使用可变引用单元格(本质上是存储可变值的简单对象)时才有意义。如果您有一个可变参考单元格,则可以使用
incr
功能:

let count = ref 0
incr count
如果使用可变变量,则没有用于该变量的内置函数,需要编写
count+1

let mutable count = 0
count <- count + 1

在这个例子中,表达式<代码> 1 +(…)<代码>是在一个C++代码中对应于<代码> i++<代码>的代码,它遍历列表并计算其长度。表达式的结果没有分配给新变量,因为它是作为

length
函数的结果直接返回的

编辑函数的参数是不可变的,这意味着您不能更改它们的值。正如Lee所提到的,您可以使用变量阴影来隐藏旧值和新值,但请注意,这只会产生局部效果(就像定义一个具有不同名称的新变量来存储新值)。例如:

let rec length list count =
  match list with 
  | [] -> count
  | _::tail -> 
     let count = count + 1 // Variable shadowing used here
     length tail count

您不能编写函数来简化行
let count=count+1
,如上所述,这相当于编写
let newCount=count+1
,然后在最后一行使用
newCount

如果您不想使用mutable,那么就不能像C++中的
+
那样进行破坏性更新。你可以用一个同名的新变量来隐藏一个变量

let x = 4;
let x = x + 1 in (x+4)  //returns 8
虽然你不能把它写成函数

编辑:如果您希望使用可变变量,则可以创建一个函数来修改:

然后,您可以将其用作

let i = ref 1
increment i
let iv = !i    //iv contains 2

正如Tomas在他的回答中指出的那样,这个函数已经存在并且被称为
incr

您不能模拟后增量运算符,但可以进行预增量

let inline (+=) (x : byref<_>) y = x <- x + y

let mutable a = 0
&a += 1

let inline(+=)(x:byref)y=x你的意思是
let fx=x+1
但我不能使用:count=f count第一次在谷歌上点击f#中的
i++
好的,谢谢,但我想写一个以“count”为参数的函数,然后(在函数体中)它是递增的,我该怎么做呢?@cheziHoyzer请参见编辑-但请注意,函数方法是使用不可变值,因此除非局部变量是可变的,否则不能“递增”。@TomasPetricek仅当
x
是32位整数时才工作。
incr x
好的,谢谢,但是我想写一个以“count”为参数的函数,然后(在函数体中)增加它(如果我使用mutable),我该怎么做(函数声明应该是谁的?)最好将这个版本设置为泛型,这样它可以处理int32之外的int64
let i = ref 1
increment i
let iv = !i    //iv contains 2
let inline (+=) (x : byref<_>) y = x <- x + y

let mutable a = 0
&a += 1
let inline incv (x : byref<_>) = x <- x + LanguagePrimitives.GenericOne; x

let mutable b = 0
incv &b