首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >附加到列表F#的开头

附加到列表F#的开头
EN

Stack Overflow用户
提问于 2018-02-26 11:32:27
回答 2查看 1.5K关注 0票数 2

首先,我知道如何在f#中追加列表。如果我有list = [1;2;3],那么我可以做一些类似5 :: list的事情,它会给我一个新的列表[5;1;2;3]

然而,我已经编写了一个函数,它使用完全相同的语法,但却将其追加到列表的后面,我无法在我的一生中找到原因。有人能给我解释一下为什么我写的函数在我的列表后面而不是前面附加和项目吗?

let menu = [("pizza",17);("hotdog",5);("burger", 12);("drink",3);("milkshake",4)]

代码语言:javascript
运行
复制
let rec  insert dict key value =
match dict with
| (k,v) :: tl when k = key -> (k,v)::tl
| (k,v) :: tl -> (k,v)::insert tl key value
| [] -> (key,value) :: []


> insert menu "bacon" 22;;
val it : (string * int) list =
[("pizza", 17); ("hotdog", 5); ("burger", 12); ("drink", 3);
("milkshake", 4); ("bacon", 22)]

我并不关心它是以哪种方式添加到我的列表中的,我只是不明白为什么当我使用反操作符时它会结束。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-26 11:48:25

您总是在列表的前面插入新的对,这是实际列表末尾的最后一个尾。

因此,如果我们考虑这个例子:

代码语言:javascript
运行
复制
insert [(1, 2)] 3 4
// Returns [(1, 2); (3, 4)]

[(1, 2)]也可以这样编写:

代码语言:javascript
运行
复制
(1, 2) :: []

您的代码有效地做到了这一点:

代码语言:javascript
运行
复制
(1, 2) :: (3, 4) :: []
票数 4
EN

Stack Overflow用户

发布于 2018-02-26 11:50:13

您的insert是一个递归函数。遍历每个元素,直到到达空列表的底部为止。如果没有找到该元素,则返回一个元素列表,并添加元素。因为您在底部,现在在您浏览列表之前的所有元素都会被添加到这个列表的顶部。

因此,总的来说,您的新项目将添加在末尾,或附加。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48987528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档