erlang练习题(二)

2023-09-13 18:24:31

题目一

替换元组或列表中指定位置的元素,新元素作为参数和列表或元组一起传入函数内

解答

replaceIdx(List, Index, Val) ->

 replaceIdx(List, Index, Val, 1, []).


replaceIdx([], _, _, _, Acc) ->

 lists:reverse(Acc);

%% 到达替换位置的处理

replaceIdx([_ | Rest], Index, Val, Index, Acc) ->

 io:format("[~p]~n", [[Val | Acc]]),

 replaceIdx(Rest, Index, Val, Index + 1, [Val | Acc]);

 

replaceIdx([Element | Rest], Index, Val, CurrentIndex, Acc) ->

 io:format("[~p]~n", [[Element | Acc]]),

 replaceIdx(Rest, Index, Val, CurrentIndex + 1, [Element | Acc]).

题目二

指定列表第几位之后的数据进行反转。如:指定[2,3,5,6,7,2]第3位后进行反转

解答

%% 和并两个列表 
merge_list(List1, List2) ->
	merge_list(List1, List2, []).

merge_list([], [], Acc) -> lists:reverse(Acc);
merge_list([H | T], List2, Acc) ->
	merge_list(T, List2, [H | Acc]);
merge_list([], [H | T], Acc) ->
	merge_list([], T, [H | Acc]).

%% 指定列表第几位之后的数据进行反转。如:指定[2,3,5,6,7,2]第3位后进行反转为 [2,3,5,2,7,6] 
reverse_n(List, N) ->
	Sublist = lists:sublist(List, N + 1, length(List) - N),
	NewSublist = lists:reverse(Sublist),
	merge_list(lists:sublist(List, 3), NewSublist).

题目三

对列表进行过滤,输出列表所有的奇数和偶数

解答

filteroe(List) ->

 Odds = [X || X<-List, X rem 2 /= 0],

 Evens = [X || X<-List, X rem 2 == 0],

 io:format("Odds = ~p ~nEvens = ~p ~n", [Odds, Evens]).

题目四

使用匿名函数对列表进行过滤,输出列表所有的奇数和偶数(可以使用API)

解答

filter_odd_even(List) ->

 Odds = lists:filter(fun(X) -> X rem 2 /= 0 end, List),

 Evens = lists:filter(fun(X) -> X rem 2 =:= 0 end, List),

 {Odds, Evens}.

题目五

对数字列表或者元组中所有的奇数进行求和

解答

sum_odd(List) ->

 lists:sum([X || X<- List, X rem 2 /= 0]).

题目六

对数字列表或元组,输出所有偶数乘以它在此列表或元组中的偶数位数

比如在列表[3,4,8,9,7,2,5]中8所在此列表中的偶数位数为2,2所在此元组中的偶数位数为3

解答

get_evens_mul_Idx(List) ->

 get_evens_mul_Idx(List, 1, []).

 

%% 递归终止

get_evens_mul_Idx([], _, Acc) -> lists:reverse(Acc);

 

%% 处理遇到偶数的情况

get_evens_mul_Idx([Value | Rest], Index, Acc) when Value rem 2 == 0 ->

 get_evens_mul_Idx(Rest, Index + 1, [Value * Index | Acc]);

 

%% 非偶数的情况,下标增加,其他不变

get_evens_mul_Idx([_ | Rest], Index, Acc) ->

 get_evens_mul_Idx(Rest, Index + 1, Acc).

题目七

将指定的元素插入到列表或元组中指定的位置,列表或元组中后面的元素依次向后挪动

解答

insert_at(List, Index, Val) ->

 insert(List, Index, Val, 1, []).

 
insert([], _, _, _, Acc) -> lists:reverse(Acc);

%% 处理Index之前的元素,原样插入

insert([Value | Rest], Index, Val, CurIdx, Acc) when CurIdx /= Index ->

 insert(Rest, Index, Val, CurIdx + 1, [Value | Acc]);


%% 到达插入位置的处理

insert(List, Index, Val, Index, Acc) ->

 insert(List, Index, Val, Index + 1, [Val | Acc]).

题目八

用列表输出在列表或元组中查找到的的所有重复元素

解答

find_dup(Items) ->

 find_dup(Items, []).


find_dup([], Duplicates) ->

 Duplicates;

%% Acc 是用来存储重复值只存一次

find_dup([Item | Rest], Acc) ->

 case lists:member(Item, Rest) and not lists:member(Item, Acc) of % 如果答案集合已经存在了重复元素,就不要加入

  true -> find_dup(Rest, [Item | Acc]);

  false -> find_dup(Rest, Acc)

 end.

题目九

删出列表或元组中的所有重复元素

解答

%% 思路:就是把元素加入到新的列表中,重复的不加入 0

delete_dup(Items) ->

  delete_dup(Items, []).


delete_dup([], Acc) -> Acc;

delete_dup([Item | Rest], Acc) ->

 case lists:member(Item, Acc) of % 元素没有出现在结果集中就加入

  false -> delete_dup(Rest, [Item | Acc]);

  true -> delete_dup(Rest, Acc)

 end.

题目十

使用冒泡排序对列表进行排序(升序)

解答

%% 取列表头作为最大值和

bubble_sort(List) ->

 bubble_sort(List, length(List)).


bubble_sort(List, 0) -> List; % 当迭代次数为 0 时,排序完成

bubble_sort(List, N) ->

 SortedList = bubble_pass(List, N), % 对列表进行下一趟冒泡,一个元素到达最终位置

 bubble_sort(SortedList, N - 1). % 递归的进行下一趟冒泡


bubble_pass([X, Y | Rest], N) when X > Y ->

 [Y | bubble_pass([X | Rest], N - 1)]; % 如果 X > Y 就交换他们

bubble_pass([X | Rest], N) ->

 [X | bubble_pass(Rest, N - 1)]; % 否则位置保持不变

bubble_pass([], _) -> [].
更多推荐

虚拟DOM与diff算法

虚拟DOM与diff算法snabbdom虚拟DOMdiff算法snabbdom是什么:snabbdom是著名的虚拟DOM库,是diff算法的鼻祖,Vue源码借鉴了snabbdom虚拟DOM是什么:本质上是存在内存里的JavaScript对象作用:用来描述真实DOM的层次结构,真实DOM上的一切属性都能在虚拟DOM上找到

微店商品详情数据接口

微店商城是由北京口袋时尚科技有限公司开发的一款基于微信等社交平台的开店工具,于2011年5月上线。2014年1月,"微店"APP正式上线。微店拥有近9000万小微店主,通过微店和微店店长版两个app,微店已经从小微店主首选的开店工具转型为助力创业者发展兴趣、创立品牌、玩成事业的系统及基础设施。微店商品详情API接口(i

小型网络实验组网

路漫漫其修远兮,吾将上下而求索时隔多日,没有更新,今日一写,倍感教育的乐趣。如果让我每天发无意义的文章,我宁可不发。实验拓扑实验要求(1)内网主机采用DHCP分配IP地址(2)外网主机可以访问内网www.wxy.com的网站(3)外网主机可以通过64.0.0.3访问内网服务器实验配置实验配置由于时间原因,当时并没有将其

掌握这些算法,让你的编程之路更顺畅——重要算法解析

一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。这些算法通常被广泛应用于日常编程工作中,是提升编程效率和解决实际问题的重要工具。本文将介绍几种十分重要的“必抓!”算法,希望能对广大程序员朋友们提供一些帮助。程序员的必抓算法:一:引言在编程的世界里,算法是解决问

动手学深度学习_个人笔记01_李沐(更新中......)

序言神经网络——本书中关注的DL模型的前身,被认为是过时的工具。深度学习在近几年推动了CV、NLP和ASR等领域的快速发展。关于本书让DL平易近人,教会概念、背景和代码。一种结合了代码、数学和HTML的媒介测试深度学习(DL)的潜力带来了独特的挑战,因为任何一个应用都会将不同的学科结合在一起。应用DL需要同时了解:(1

记录一下浏览器缩放和移动端缩放的区别,其实两者是有很大的不同的,之前一直搞不明白。

直接问AI它们之间的区别的话,是这么回答的浏览器缩放和移动端缩放是两种不同的概念,它们涉及到用户在不同设备上改变网页内容大小的方式。以下是它们的主要区别:浏览器缩放(DesktopBrowserZoom):浏览器缩放是指在桌面计算机浏览器上,用户通过调整浏览器窗口的缩放级别来改变网页内容的大小。用户可以使用浏览器的缩放

金蝶云星空与旺店通·旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单)

金蝶云星空与旺店通·旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单)数据源平台:金蝶云星空金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司,提供一个通用的ERP服务平台。K/3Cloud支持的协同应用

Redis 有序集合操作实战(全)

目录ZADD加入有序集ZCARD取成员数量ZCOUNT计算区间成员数量ZINCRBY运算ZRANGE取区间成员(升序)ZRANGEBYSCORE按分值排序取成员ZRANK取成员排名ZREM移除成员ZREMRANGEBYRANK按位置区间批量移除ZREMRANGEBYSCORE按分值区间移除ZREVRANGE取区间成员(

[maven] maven 简述及使用 maven 管理单个项目

maven简述及使用maven管理单个项目简单的说就是maven是一个项目管理工具,同时也是一个依赖管理工具。使用maven生成的项目结构大致如下:project|-src/main/java|-src/main/resources|-src/test/java|-src/test/resources本篇笔记带一些核心

华为云云耀云服务器L实例评测|docker私有仓库部署手册

【软件安装版本】【集群安装(是)(否)】版本号文档编写文档审核创建日期修改日期1.0jzgjzg2023.9.13一.部署规划与架构1.规划:(集群:网络规划,服务器规划)环境:华为云云耀云服务器L实例,非集群方式网络:公网ipv4地址;内网:192.168.0.147网络需要配置安全组使用环境:内网,不适合生产环境使

如何导出数据库数据字典

1、随便找一个工程项目,在项目build.gradle配置文件添加以下依赖compilegroup:'cn.smallbun.screw',name:'screw-core',version:'1.0.5'2、刷新下载依赖3、将以下代码拷贝到工程任意Java目录ScrewDemo.javapackagecom.xxx;

热文推荐