erlang基础练习题

news/2025/1/15 18:02:55/

erlang基础练习题

1、将列表中的integer,float,atom转成字符串并合并成一个字个字符串:[1,a,4.9,“sdfds”] 结果:“1a4.9sdfds”(禁用++ – append concat实现)

// An highlighted block
spl([]) -> [];
spl([H|T]) ->X = ifis_integer(H) -> [integer_to_list(H)|spl(T)];is_atom(H)    -> [atom_to_list(H)|spl(T)];is_float(H)   -> [float_to_list(H, [{decimals,1}])|spl(T)];is_list(H)    -> [H|spl(T)];true -> erlang:error("data error")end,%% 去除列表中“,”binary_to_list(list_to_binary(X)).%% 尾递归 
spl2(L) -> spl2(L, []).spl2([], ACC) -> ACC;
spl2([H|T], ACC) ->X = ifis_integer(H) -> spl2(T, [ACC|integer_to_list(H)]);is_atom(H)    -> spl2(T, [ACC|atom_to_list(H)]);is_float(H)   -> spl2(T,[ACC|float_to_list(H, [{decimals,1}])]);is_list(H)    -> spl2(T,[ACC|H]);true -> erlang:error("data error")end,binary_to_list(list_to_binary(X)).

2、得到列表或元组中的指定位的元素

// An highlighted block
pop([], _) -> [];
pop({}, _) -> [];pop(L, K) ->case is_list(L) oftrue  -> pop(L, K, []);false -> pop(tuple_to_list(L), K, [])end.pop([H|T], K, _) ->ifK =:= 1 -> H;K =< 0 -> exit(K);true -> pop(T, K-1)end.

3、根据偶数奇数过滤列表或元组中的元素(禁用API实现)

// An highlighted block
odds_and_evens([]) -> [];
odds_and_evens({}) -> [];
odds_and_evens(L) ->case is_list(L) offalse -> odds_and_evens1(tuple_to_list(L), [], []);true -> odds_and_evens1(L, [], [])end.odds_and_evens1([H|T] , Odds, Evens) ->case (H rem 2) of1 -> odds_and_evens1(T, [H|Odds], Evens);0 -> odds_and_evens1(T, Odds, [H|Evens])end;
odds_and_evens1([], Odds, Evens) ->{lists:reverse(Odds), lists:reverse(Evens)}.

4、便用匿名函数对列表奇数或偶数过滤

// An highlighted block
filter_odd([]) -> [];
filter_odd({}) -> {};
filter_odd(L) ->case is_list(L) offalse -> list_to_tuple([X || X <- L, X rem 2 =:= 1]);true -> [X || X <- L, X rem 2 =:= 1]end.filter_evens(L) ->case is_list(L) offalse -> list_to_tuple([X || X <- L, X rem 2 =:= 0]);true -> [X || X <- L, X rem 2 =:= 0]end.

5、计算数字列表[1,2,3,4,5,6,7,8,9]索引N到M的和

// An highlighted block
sum([], _, _) -> [];
sum(L, N ,M) -> for(L, 1, N, M).for([], _, _, _) -> 0;
for([H|T], I, N, M) ->ifI >= N, I =< m -> H + for(T, I+1, N, M);true ->for(T, I+1, N, M)end.

6、查询List1是为List2的前缀(禁用string API实现)

// An highlighted block
test([], []) -> true;
test(_, []) -> false;
test([], _) -> true;
test([H1|T1], [H2|T2]) ->case H1 =:= H2 oftrue -> test(T1, T2);false -> falseend.

7、逆转列表或元组(禁用lists API实现)

// An highlighted block
reverse([]) -> [];
reverse({}) -> {};
reverse(L)  ->ifis_list(L) -> reverse_list(L, []);is_tuple(L) -> reverse_tuple(tuple_to_list(L), []);true -> throw("no a tuple or list")end.reverse_list([], L) -> L;
reverse_list([H|T], L) -> reverse_list(T, [H|L]).reverse_tuple([], L) -> list_to_tuple(L);
reverse_tuple([H|T], L) -> reverse_tuple(T, [H|L]).

8、对列表进行排序

// An highlighted block
sort_list([]) -> [];
sort_list([T|H]) ->sort_list([X || X <- H, X<T]) ++ [T] ++ sort_list([X || X <- H, X>=T]).%% 第二种方法
sort_list([]) -> [];
sort_list(L) -> sort_list(L, len(L)).sort_list(L, 1) -> L;
%% 冒泡排序需要排序Len-1次
sort_list([H|T], Len) ->Result = get_list(H, T),sort_list(Result, Len-1).get_list(H, []) -> [H];
get_list(X, [H|T]) ->case (X>H) oftrue -> [H|get_list(X, T)];false -> [X|get_list(H, T)]end.%%get_list(H, []) -> [H];
%%get_list(X, [H|T]) ->
%%    if
%%        X>H -> [H|get_list(X,T)];
%%        true -> [X|get_list(H,T)]
%%    end.len(L) -> len(L, 0).len([], ACC) -> ACC;
len([_H|T], ACC) -> len(T, 1+ACC).

9、对数字列表进行求和再除以指定的参数,得到商余

// An highlighted block
sum_rem([], _) -> [];
sum_rem(L, N) -> {sum(L)/N, sum(L) rem N}.sum(L) -> sum(L, 0).sum([], ACC) -> ACC;
sum([H|T], ACC) -> sum(T, ACC+H).

10、获得当前的堆栈

erlang:get_stacktrace().

11、获得列表或元组中的最大最小值(禁用API实现)

// An highlighted block

输入A(元子列表),B(数值列表)两个相同长度的参数进行随机匹配(要求字母为Key,数值为Value),支持指定的Key和Value在一组

// An highlighted block
%% 随机2个数据同时捕获异常
r_match(A, B) ->%% 捕获异常:非列表异常,长度不一的异常case (length(A) =:= length(B)) and is_list(A) and is_list(B) oftrue ->L1 = random(A),L2 = random(B),match(L1, L2, []);false -> error("data error")end.%% 进行匹配
match([],[], ACC) -> ACC;
match([L1H|L1T], [L2H|L2T], ACC) ->%% 捕获数据异常case is_atom(L1H) oftrue ->case is_integer(L2H) oftrue ->match(L1T, L2T, [{L1H,L2H}|ACC]);false ->error("bad data")end;false ->error("bad data")end.%% 三个参数的情况,先匹配key和value,同时捕获异常
r_match(A, B, C) ->%% 捕获异常,同时进行参数匹配case (length(A) =:= length(B)) and is_list(A) and is_list(B) oftrue -> para_match(A, B, C, [], [], false, false);false -> error("data error")end.
%% 遍历2个列表进行匹配
para_match([], [], {Key, Value}, L1, L2, true, true) -> match(random(L1), random(L2), [{Key, Value}]);
para_match([], _, _, _, _, false, true) -> error("bad data");
para_match([], [], _, _, _, true, false) -> error("bad data");%% 可选参数是否已经匹配并添加进去了
para_match([H1|T1], B, {Key, Value}, L1, L2, F1, F2) ->case (H1 =:= Key) and (F1 =:= false) oftrue ->para_match(T1, B, {Key, Value}, L1, L2, true, F2);false ->para_match(T1, B, {Key, Value}, [H1|L1], L2, F1, F2)end;para_match([], [H1|T1], {Key, Value}, L1, L2, F1, F2) ->case (H1 =:= Value) and (F2 =:= false) oftrue ->para_match([], T1, {Key, Value}, L1, L2, F1, true);false ->para_match([], T1, {Key, Value}, L1, [H1|L2], F1, F2)end.random(L) ->%% 生成一些随机数值,进行随机排序F = lists:map(fun(X) -> {rand:uniform(), X} end, L),S = lists:sort(F),[V || {_,V} <- S].

http://www.ppmy.cn/news/338383.html

相关文章

linux搭建java部署环境-docker

目录 一. Docker环境 二. JAVA环境安装 三. MySQL安装 四. Redis安装 五. Nginx安装 六.检查安装结果 七. 创建maven仓库 八. 项目打jar并发布 九. nginx反向代理 一. Docker环境 1. 查看linux内核版本: uname -a 2. 查看centos版本: cat /etc/redhat-release 3. 安…

企业微信开发/主要代码分享(前端)

前端起步 这次开发主要是自建应用/H5/Vue2 因为用的是自建应用H5&#xff0c;所以第一步考虑的是企微中jssdk的使用 1.利用vue的mixin方法和js类的方法写两个个公共组件&#xff08;可以下载任意目录下&#xff09; 首先是getAuth.js import { oauthUrl, oauthUser } from &q…

基于PHP的论文管理系统的设计与实现

目 录 论文总页数&#xff1a;27页 1 引言 1 2 系统需求 1 2.1 系统需求概述 1 2.2 系统详细需求分析 1 2.2.1 基于web开发 1 2.2.2 格式化文档 2 2.2.3 前台需求 2 2.2.4 性能需求 2 3 方案选择 2 3.1 方案比较 2 3.1.1 系统模式比较 2 3.1.2 程序语言选择与比较 3 3.1.3 数据…

自定义QCompleter,直接绑定QLineEdit,可默认选中,自动根据内容行数自动缩小高度

自定义QCompleter&#xff0c;直接绑定QLineEdit&#xff0c;可默认选中&#xff0c;自动根据内容缩小窗口&#xff0c;能设置最高显示行数&#xff0c;自动停靠。里面的duplicatelist是本人的特殊用途&#xff0c;正常情况下是不需要&#xff0c;也就构造函数最后一个参数其实…

紧急求助~~!!!

刚刚学了Java一个学期&#xff0c;刚刚对Java稍稍了解&#xff0c;老师就让我们完成一个课程设计题目。虽然应该可以编出来&#xff0c;但我现在真的没有什么思路&#xff0c;所以&#xff0c;紧急求助高手指点一二&#xff0c;帮帮在下吧&#xff0c;一个星期的时间就得上交了…

erlang练习题

-module(three). -export([]). %% 1、将列表中的integer,float,atom转成字符串并合并成一个字个字符串&#xff1a;[1,a,4.9,“sdfds”] 结果&#xff1a;“1a4.9sdfds” one([])->[]; one([H|T])-> if is_list(H)->Hone(T); true->lists:flatten(io_lib:format(&…

Quartz 单独启动任务调度器案例举例

Quartz 配置文件&#xff0c;如果是基于maven 的项目只需要放置到src/main/resources目录下 #quartz setting File # quartz instance Name org.quartz.scheduler.instanceName MySchedulerVincent# quarts thread pool size 3 ; maximum of 3 jobs can be run simultaneous…

Spring常用注解(收藏大全)

点击上方“程序员大咖”&#xff0c;选择“置顶公众号” 关键时刻&#xff0c;第一时间送达&#xff01; 作者&#xff1a;IT_faquirhttps://blog.csdn.net/IT_faquir/article/details/78025203 程序员大咖整理发布&#xff0c;转载请联系作者获得授权 Spring部分 1.声明bean的…