List 在列表Ocaml中插入元组
我已经声明了一个列表l=[];;现在尝试使用“@”将元组附加到此列表中。但我不能这样做。谁能帮我整理一下吗List 在列表Ocaml中插入元组,list,tuples,ocaml,concatenation,List,Tuples,Ocaml,Concatenation,我已经声明了一个列表l=[];;现在尝试使用“@”将元组附加到此列表中。但我不能这样做。谁能帮我整理一下吗 let l = [] for x = 1 to 10 do l <- l@[(x,x+10)] done;; 让l=[] 对于x=1到10 do l你对l的定义意味着l是不可变的。您将其值定义为[],并且此值永远无法更改 如果希望能够更改l,则需要将其定义为可变值。一种简单的方法是将其设置为“ref”: 在此之后,您可以使用获取l的值运算符并使用:=运算符更改值: # !l
let l = []
for x = 1 to 10 do
l <- l@[(x,x+10)]
done;;
让l=[]
对于x=1到10 do
l你对l
的定义意味着l
是不可变的。您将其值定义为[]
,并且此值永远无法更改
如果希望能够更改l
,则需要将其定义为可变值。一种简单的方法是将其设置为“ref”:
在此之后,您可以使用获取l
的值
运算符并使用:=
运算符更改值:
# !l;;
- : '_a list = []
# l := !l @ [3];;
- : unit = ()
# !l;;
- : int list = [3]
但是,此代码不是惯用的OCaml。如果您在学术上学习OCaml,那么最好学习使用不可变值
更新
下面是一些编写递归函数的提示。我不想因为给你写代码而破坏练习
递归解决问题的方法是回答以下问题:
我要解决的一般问题是什么?在您的例子中,您试图创建一个具有一些算术属性的长度对的列表
这个问题最简单的例子是什么?在您的情况下,最简单的情况是所需的长度为0(在这种情况下,列表为空)
如果我有一个非琐碎的问题,我怎么能把它分成容易计算的答案和同一个问题的小案例?你想把这些组合成完整的答案。在您的例子中,较小的部分将是结果的第一个元素(易于计算),并且是一个较短的列表(相同问题的较小部分)
然后,对于带有一些参数(例如a、b、c、d)的花园式递归函数,您的代码如下所示:
让rec f a b c d=
若然
其他的
让tp=in
让(a',b',c',d')=in
设smres=fa'b'c'd'in
你对l
的定义意味着l
是不可变的。您将其值定义为[]
,并且此值永远无法更改
如果希望能够更改l
,则需要将其定义为可变值。一种简单的方法是将其设置为“ref”:
在此之后,您可以使用获取l
的值
运算符并使用:=
运算符更改值:
# !l;;
- : '_a list = []
# l := !l @ [3];;
- : unit = ()
# !l;;
- : int list = [3]
但是,此代码不是惯用的OCaml。如果您在学术上学习OCaml,那么最好学习使用不可变值
更新
下面是一些编写递归函数的提示。我不想因为给你写代码而破坏练习
递归解决问题的方法是回答以下问题:
我要解决的一般问题是什么?在您的例子中,您试图创建一个具有一些算术属性的长度对的列表
这个问题最简单的例子是什么?在您的情况下,最简单的情况是所需的长度为0(在这种情况下,列表为空)
如果我有一个非琐碎的问题,我怎么能把它分成容易计算的答案和同一个问题的小案例?你想把这些组合成完整的答案。在您的例子中,较小的部分将是结果的第一个元素(易于计算),并且是一个较短的列表(相同问题的较小部分)
然后,对于带有一些参数(例如a、b、c、d)的花园式递归函数,您的代码如下所示:
让rec f a b c d=
若然
其他的
让tp=in
让(a',b',c',d')=in
设smres=fa'b'c'd'in
你对l
的定义意味着l
是不可变的。您将其值定义为[]
,并且此值永远无法更改
如果希望能够更改l
,则需要将其定义为可变值。一种简单的方法是将其设置为“ref”:
在此之后,您可以使用获取l
的值
运算符并使用:=
运算符更改值:
# !l;;
- : '_a list = []
# l := !l @ [3];;
- : unit = ()
# !l;;
- : int list = [3]
但是,此代码不是惯用的OCaml。如果您在学术上学习OCaml,那么最好学习使用不可变值
更新
下面是一些编写递归函数的提示。我不想因为给你写代码而破坏练习
递归解决问题的方法是回答以下问题:
我要解决的一般问题是什么?在您的例子中,您试图创建一个具有一些算术属性的长度对的列表
这个问题最简单的例子是什么?在您的情况下,最简单的情况是所需的长度为0(在这种情况下,列表为空)
如果我有一个非琐碎的问题,我怎么能把它分成容易计算的答案和同一个问题的小案例?你想把这些组合成完整的答案。在您的例子中,较小的部分将是结果的第一个元素(易于计算),并且是一个较短的列表(相同问题的较小部分)
然后,对于带有一些参数(例如a、b、c、d)的花园式递归函数,您的代码如下所示:
让rec f a b c d=
若然
其他的
让tp=in
让(a',b',c',d')=in
设smres=fa'b'c'd'in
你对l
的定义意味着l
是不可变的。您将其值定义为[]
,并且此值永远无法更改
如果希望能够更改l
,则需要将其定义为可变值。一种简单的方法是将其设置为“ref”:
在这之后你可以得到t