1、编写一个名为 boolean.erl 的模块,该模块接收逻辑表达式和布尔值(用原子 true 和 false 表示),并返回布尔结果。你编写的函数应包括 b_not/1、b_and/2、b_or/2 和 b_nand/2。你不应使用逻辑构造符 and、or 和 not,而应使用模式匹配来实现目标。从 shell 测试你的模块。调用你模块中导出函数的一些示例如下:bool:b_not(false) 返回 true;bool:b_and(false, true) 返回 false;bool:b_and(bool:b_not(bool:b_and(true, false)), true) 返回 true。符号 foo(X) ⇒ Y 表示用参数 X 调用函数 foo 将返回值 Y。请记住,and、or 和 not 是 Erlang 中的保留字,因此你必须在函数名前加上 b_。
以下是 boolean.erl 模块的代码实现:
-module(boolean).
-export([b_not/1, b_and/2, b_or/2, b_nand/2]).
b_not(true) -> false;
b_not(false) -> true.
b_and(true, true) -> true;
b_and(_, _) -> false.
b_or(false, false) -> false;
b_or(_, _) -> true.
b_nand(X, Y) -> b_not(b_and(X, Y)).
要测试该模块,可按如下步骤操作:
- 将上述代码保存为
boolean.erl文件。 - 打开 Erlang shell。
- 编译模块:
erlang c(boolean). - 测试函数,例如:
erlang boolean:b_not(false). boolean:b_and(false, true). boolean:b_and(boolean:b_not(boolean:b_and(true, false)), true).
2、编写一个函数 sum/1,该函数接收一个正整数 N,返回 1 到 N 之间所有整数的和。
实现该函数的示例代码如下(使用 Erlang 语言):
sum(N) -> sum(N, 0).
sum(0, Acc) -> Acc;
sum(N, Acc) -> sum(N - 1, Acc + N).
3、编写一个函数,返回格式为 [N, N - 1, …, 2, 1] 的列表。
以下是一个 Python 实现的函数示例:
def reverse_create(N):
return list(range(N, 0, -1))
你可以使用 reverse_create(3) 来测试,它将返回 [3, 2, 1] 。
4、编写一个函数,输出1到N之间的偶数。
可使用高阶函数实现。分两步解决问题,或在函数中使用两个子句。可借助 lists:seq(1, N) 生成 1 到 N 的整数列表。
5、编写一个函数,该函数接收一个列表,并返回元素顺序反转后的列表。
可以使用如下的尾递归函数实现列表反转:
reverse(List) -> reverse_acc(List, []).
reverse_acc([], Acc) -> Acc;
reverse_acc([H | T], Acc) -> reverse_acc(T, [H | Acc]).
6、编写一个函数,该函数接受一个列表的列表,并将它们连接起来。
可以使用辅助函数分步骤连接列表,还可以使用高阶函数和列表推导式来实现。
- 如使用列表推导式可实现为:
erlang concatenate(Lists) -> [E || SubList <- Lists, E <- SubList].
- 使用高阶函数可利用
lists:foldl实现:
erlang concatenate(Lists) -> lists:foldl(fun(SubList, Acc) -> Acc ++ SubList end, [], Lists).
7、编写一个服务器,该服务器将在接收循环中等待,直到有消息发送给它。根据消息的不同,它应该打印消息内容并再次循环,或者终止。你需要隐藏正在处理进程这一事实,并通过一个可以从 shell 调用的函数接口来访问其服务。这个函数接口在 echo.erl 模块中导出,它将生成进程并向其发送消息。函数接口如下:echo:start() ⇒ ok;echo:print(Term) ⇒ ok;echo:stop() ⇒ ok。提示:使用内置函数 register/2,并使用进程管理器测试你的回声服务器。警告:使用内部消息协议,以避免在调用 echo:print(stop) 等函数时停止进程。
以下是实现该回声服务器的代码示例:

最低0.47元/天 解锁文章
77

被折叠的 条评论
为什么被折叠?



