erlang练习题(三)

题目一

查询列表A是否为列表B的前缀

解答

isPrefix([], List2) -> io:format("A is prefix of B ~n");isPrefix([H1 | ListA], [H2 | ListB]) ->case H1 == H2 oftrue -> isPrefix(ListA, ListB);false -> io:format("A is not prefix of B ~n")end.

题目二

接受一个整数列表作为参数,返回一个新列表,其中的元素为原列表中所有出现至少两次的元素

解答

getTwice(List) ->getTwice(List, []).getTwice([], Acc) -> Acc;getTwice([Item | Rest], Acc) ->%% 当前元素在后面有重复出现,且在结果列表中没出现过,就加入case lists:member(Item, Rest) and not lists:member(Item, Acc) oftrue -> getTwice(Rest, [Item | Acc]);false -> getTwice(Rest, Acc)end.

题目三

判断列表A是否在列表B中出现,出现则输出在B列表第几位开始(例如[3,5,7,3]在[8,3,5,3,5,7,3,9,3,5,6,3]的第4位出现

解答

find_sublist_pos(_, []) -> not_found;find_sublist_pos(Sublist, B) ->find_sublist_pos(Sublist, B, 1).find_sublist_pos(Sublist, RestB, Pos) when length(RestB) < length(Sublist) ->not_found;find_sublist_pos(Sublist, RestB, Pos) ->case starts_with(Sublist, RestB) oftrue -> {found, Pos};false -> find_sublist_pos(Sublist, tl(RestB), Pos + 1) % tl获取列表的尾部集合(除了头元素的其他元素)end.%% 第一个列表是否为第二列表的前缀%% 空列表是任何列表的前缀starts_with([], _) -> true;starts_with(_, []) -> false;starts_with([H1 | T1], [H2 | T2]) when H1 =:= H2 ->starts_with(T1, T2);starts_with(_, _) -> false. %% 元素值不同,为false

题目四

在一个全部元素为{Key, Value}元组结构的元组或列表中,查找列表或元组中第一个

符合指定键的元素

例如:在[{a, 1}, {b, 2}, {c, 3}, {a, 4}] 如果查找第一个a为键的元素即输出 {a, 1}

解答

findfirstkey_a([]) -> false;findfirstkey_a([Head | Rest]) ->{Key, Val} = Head,case Key == 'a' oftrue -> Head;false -> findfirstkey_a(Rest)end.

题目五

在一个全部元素为{Key, Value}元组结构的元组或列表中,用列表输出查找到的列表或元组中全部指定键的元素

例如:在[{a, 1}, {b, 2}, {c, 3}, {a, 4}] 如果查找全部a为键的元素即输出 [{a, 1}, {a, 4}]

解答

findkey_a(List) ->findkey_a(List, []).findkey_a([], Acc) -> Acc;findkey_a([Head | Rest], Acc) ->%io:format("Head = ~p~n Acc = ~p~n", [Head, Acc]),{Key, _} = Head,case Key == 'a' oftrue -> findkey_a(Rest, [Head | Acc]);false -> findkey_a(Rest, Acc)end.

题目六

在一个全部元素为{Key, Value}元组结构的元组或列表中,删除列表或元组中第一个符合指定键的元素且输出时不改变顺序

例如:在[{a, 1}, {b, 2}, {c, 3}, {a, 4}] 如果删除第一个a为键的元素即输出 [{b, 2}, {c, 3}, {a, 4}]

解答

deletefirstkey_a(List) ->

deletefirstkey_a(List, [], false). % 第三个参数表示是否出现过了a

deletefirstkey_a([], Acc,_) -> Acc;

deletefirstkey_a([{Key, _} | Rest], Acc, false) when Key =:= a->

deletefirstkey_a(Rest, Acc, true);

deletefirstkey_a([Head | Rest], Acc, true) ->

deletefirstkey_a(Rest, [Head | Acc], true).

题目七

在一个全部元素为{Key, Value}元组结构的元组或列表中,替换列表或元组中第一个符合指定键的元素且输出时不改变顺序

例如:输入列表[{a, 1}, {b, 2}, {c, 3}, {a, 4}] 查找键为a,值替换为10

即输出[{a, 10}, {b, 2}, {c, 3}, {a, 4}] 46

解答

replacefirstkey_a(List) ->

replacefirstkey_a(List, [], 0). % 第三个参数表示是否出现过了a

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

replacefirstkey_a([{Key, _} | Rest], Acc, 0) when Key =:= a->

replacefirstkey_a(Rest, [{Key, 10}|Acc], 1);

%% 第一次插入后,即便 Key为 a ,也不会再走上面的逻辑

replacefirstkey_a([Head | Rest], Acc, _) ->

replacefirstkey_a(Rest, [Head | Acc], 1).

题目八

生成含有指定数量元素的元组,每个元素为随机integer元素, 要求元素不能有重复的(可以使用API)

解答

gen_int(N) ->

gen_int(N, []).

gen_int(0, Acc) -> {tuple, lists:reverse(Acc)};

gen_int(N, Acc) ->

Random = rand:uniform(10000),

case lists:member(Random, Acc) of

true -> gen_int(N, Acc);

false -> gen_int(N - 1, [Random | Acc])

end.

题目九

在一个全部元素为{Key, Value}元组结构的元组或列表中,将列表中相同key的值进行合并

例如:[{a,1},{b,2},{c,3},{b,4},{b,5},{c,6},{d,7},{d,8}] 输出 [{a,1},{b,11},{c,9},{d,15}]

解答

mergekv(List) ->

mergekv(List, maps:new()).

mergekv([], AccMap) -> maps:to_list(AccMap);

mergekv([{Key, Value} | T], AccMap) ->

io:format(“{p,p}~n”, [Key, Value]),

NewValue = case maps:is_key(Key, AccMap) of

​ true -> maps:get(Key, AccMap) + Value;

​ false -> Value

​ end,

NewAccMap = maps:put(Key, NewValue, AccMap), % 注意要用一个新的变量接受结果

mergekv(T, NewAccMap).

题目十

1、对相同类型的数据进行拼接,如:

binary:<<1,2>><<3,4>> 拼接后为 <<1,2,3,4>> 未完成

tuple:{a,b},{c} 拼接后为 {a,b,c}

list:[10],[20] 拼接后为 [10,20]

解答

%% 无法执行!!!

concat_binary(Binary1, Binary2) ->

Size1 = size(Binary1),

Size2 = size(Binary2),

NewSize = Size1 + Size2,

NewBinary = <<0:NewSize/unit:8>>,

NewBinary = binary_concat(Binary1, Binary2, NewBinary, 0, Size1),

NewBinary.

binary_concat(_, _, NewBinary, Size, Size) ->

NewBinary;

binary_concat(Binary1, Binary2, NewBinary, Index, Size1) when Index < size(Binary2) ->

Byte = binary_part(Binary2, Index, 1), % 从Binary2中从Index位置开始提取1长度的数据

UpdatedBinary = setelement(Size1 + Index + 1, NewBinary, Byte),

binary_concat(Binary1, Binary2, UpdatedBinary, Index + 1, Size1).

%% Tuple

concat_tuple(Tuple1, Tuple2) ->

concat_tuple(Tuple1, Tuple2, size(Tuple1), size(Tuple2), {}).

concat_tuple(Tuple1, Tuple2, 0, 0, AccTuple) ->

AccTuple;

%% 将Tuple1拼接到新元组中

concat_tuple(Tuple1, Tuple2, Index1, Index2, AccTuple) when Index1 > 0 ->

NewTuple = erlang:append_element(AccTuple, element(Index1, Tuple1)),

concat_tuple(Tuple1, Tuple2, Index1 - 1, Index2, NewTuple);

%% 将Tuple2拼接到新元组中

concat_tuple(Tuple1, Tuple2, 0, Index2, AccTuple) ->

NewTuple = erlang:append_element(AccTuple, element(Index2, Tuple2)),

concat_tuple(Tuple1, Tuple2, 0, Index2 -1, NewTuple).

%% 列表的拼接

concat_list(List1, List2) ->

concat_list(List1, List2, []).

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

concat_list([H | T], List2, Acc) ->

concat_list(T, List2, [H | Acc]);

concat_list([], [H | T], Acc) ->

concat_list([], T, [H | Acc]).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[React] react-router-dom的v5和v6

v5 版本既兼容了类组件&#xff08;react v16.8前&#xff09;&#xff0c;又兼容了函数组件&#xff08;react v16.8及以后&#xff0c;即hook&#xff09;。v6 文档把路由组件默认接受的三个属性给移除了&#xff0c;若仍然使用 this.props.history.push()&#xff0c;此时pr…

C语言入门Day_27 开发环境

前言&#xff1a; 在线编译环境涉及到联网&#xff0c;如果在没有网的情况下&#xff0c;我们就不能写代码了&#xff0c;这一章节&#xff0c;我们将会给大家介绍一下如何搭建一个本地的C语言编译环境。 如果想要设置 C 语言环境&#xff0c;需要确保电脑上有以下两款可用的…

二十二,加上各种贴图

使用pbr的各种贴图&#xff0c;albedo,金属度&#xff0c;ao,法线&#xff0c;粗糙度&#xff0c;可以更好的控制各个片元 1&#xff0c;先加上纹理坐标 texCoords->push_back(osg::Vec2(xSegment, ySegment)); geom->setVertexAttribArray(3, texCoords, osg::Array::BI…

凹凸贴图如何提高物体的真实感

什么是凹凸贴图 凹凸贴图&#xff08;Bump Mapping&#xff09;是一种计算机图形学中的技术&#xff0c;用于在表面上模拟微小的凹凸形状&#xff0c;从而增加了物体的细节和真实感。它可以在不改变物体几何形状的情况下&#xff0c;通过修改光照的反应&#xff0c;使表面看起来…

Java编程技巧:文件上传、下载、预览

目录 1、上传文件1.1、代码1.2、postman测试截图 2、下载resources目录中的模板文件2.1、项目结构2.2、代码2.3、使用场景 3、预览文件3.1、项目结构3.2、代码3.3、使用场景 1、上传文件 1.1、代码 PostMapping("/uploadFile") public String uploadFile(Multipart…

idea Springboot 高校科研资源共享系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 高校科研资源共享系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c; 系统具有完整的源代码和数据…

嵌入式Linux应用开发-面向对象-分层-分离及总线驱动模型

嵌入式Linux应用开发-面向对象-分层-分离及总线驱动模型 第八章 驱动设计的思想&#xff1a;面向对象/分层/分离8.1 面向对象8.2 分层8.3 分离8.4 写示例代码8.5 课后作业 第九章 驱动进化之路&#xff1a;总线设备驱动模型9.1 驱动编写的 3种方法9.1.1 传统写法9.1.2 总线设备…

简化 Go 开发:使用强大的工具提高生产力

作为 Go 开发人员&#xff0c;应该都知道维持简洁高效开发工作流程的重要性。为了提高工作效率和代码质量&#xff0c;简化开发流程并自动执行重复性任务至关重要。在本文中&#xff0c;我们将探讨一些强大的工具和技术&#xff0c;它们将简化 Go 开发过程&#xff0c;助力您的…

【通意千问】大模型GitHub开源工程学习笔记(3)-- 通过Qwen预训练语言模型自动完成给定的文本

摘要: 本笔记分析了使用预训练的模型生成文本的示例代码。它的步骤如下: 使用已加载的分词器 tokenizer 对输入文本进行处理,转换为模型可以理解的格式。输入文本是国家和首都的信息,最后一句是未完成的,需要模型来生成。将处理后的输入转移到模型所在的设备上(例如GPU或…

BUUCTF reverse wp 21 - 30

[ACTF新生赛2020]rome 无壳, 直接拖进IDA32 y键把v2改成char[49], n键重命名为iuput int func() {int result; // eaxint v1[4]; // [esp14h] [ebp-44h]char input[49]; // [esp24h] [ebp-34h] BYREFstrcpy(&input[23], "Qsw3sj_lz4_Ujwl");printf("Please…

acwing1081. 度的数量

求给定区间 [X,Y] 中满足下列条件的整数个数&#xff1a;这个数恰好等于 K个互不相等的 B的整数次幂之和。 例如&#xff0c;设 X15,Y20,K2,B2&#xff0c;则有且仅有下列三个数满足题意&#xff1a; 172420 182421 202422 输入格式 第一行包含两个整数 X和 Y&#xff0c;接…

目标检测YOLO实战应用案例100讲-基于YOLOv4的车牌识别

目录 前言 国内外研究现状 车牌识别系统研究现状 车牌定位算法研究现状

Java中@before和setup()方法的作用~

在Java中&#xff0c;setup()和Before同时使用的作用是在测试方法之前执行一些准备工作&#xff0c; setup()是JUnit中的一个方法&#xff0c;它通常被用来初始化测试对象和设置测试环境&#xff0c;它会在每个测试方法执行之前被调用&#xff0c;并且可以在多个测试方法中共享…

ubuntu 清理缓存

11 [1] ubuntu 清理缓存-CSDN博客

java集合

1.怎么在遍历 ArrayList 时移除一个元素&#xff1f; foreach遍历的时候删除元素会导致数组删除失败&#xff0c;可以使用迭代器的remove()方法 Iterator itr list.iterator(); while(itr.hasNext()) { if(itr.next().equals("aaa") { itr.remove(); …

《Upload-Labs》01. Pass 1~13

Upload-Labs 索引前言Pass-01题解 Pass-02题解总结 Pass-03题解总结 Pass-04题解 Pass-05题解总结 Pass-06题解总结 Pass-07题解总结 Pass-08题解总结 Pass-09题解 Pass-10题解 Pass-11题解 Pass-12题解总结 Pass-13题解 靶场部署在 VMware - Win7。 靶场地址&#xff1a;https…

基于Java的旅游管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

FreeRTOS入门教程(任务优先级,Tick)

文章目录 前言一、什么是任务优先级二、FreeRTOS如何分辨出优先级最高可运行的任务三、FreeRTOS中的时钟节拍Tick四、什么是时间片五、相同优先级任务怎么进行切换六、任务优先级实验七、修改任务优先级总结 前言 本篇文章将带大家学习FreeRTOS中的任务优先级&#xff0c;并且…

GPT-4科研实践:数据可视化、统计分析、编程、机器学习数据挖掘、数据预处理、代码优化、科研方法论

查看原文>>>GPT4科研实践技术与AI绘图 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。例如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言&#x…

CSS笔记——font、line-height知识点及图片间隙、文本溢出等解决方案

一、CSS字体属性 font-family&#xff08;字体族&#xff09;&#xff1a;指定字体的名称或类别。可以指定多个字体族&#xff0c;用逗号分隔&#xff0c;浏览器会按照指定的顺序依次寻找可用字体。可取值&#xff1a; 字体名称&#xff1a;如"Arial"、"Times N…