gpt4 book ai didi

list - Erlang:打印一个列表,其名称始终位于其前面

转载 作者:行者123 更新时间:2023-12-04 03:05:09 26 4
gpt4 key购买 nike

我刚刚开始学习 Erlang,所以如果这个问题看起来有点简单,请耐心等待。

大家好。我已经考虑了一段时间,但我想出的办法似乎都不起作用。

我正在编写一个 Erlang 函数,该函数应该采用一个列表作为参数,然后打印列表,并在其前面加上我的名字。出于本问题的目的,假设我的名字是“James”。

如果我输入 testmodule:NameInFront("Legible", "Hey", "Think")。Erlang 应该返回 ["James", "Legible", "Hey", "Think"]

这是我到目前为止的代码:

-模块(测试模块)。

-export([NameInFront/1]).

NameInFront(List)-> ["James"]++[List].

当我只输入一个单词时,它工作得很好,我猜这是 NameInFront/1 部分的错误,但我希望它能够处理我输入的任意数量的单词.有人知道如何让我的函数处理多个输入吗?非常感谢。

最佳答案

我不太确定你的意思:你是否希望你的函数是可变的(采用灵活数量的参数),或者你在让列表正确连接在一起时遇到困难。

可变参数函数不是 Erlang 的工作方式。 FunctionName/Arity 定义了 Erlang 中函数的具体标识 ( discussed here )。因此,我们让函数接受多个参数的方法是将一个(或多个)参数制作为一个列表:

print_terms(Terms) -> io:format("~tp~n", [Terms]).

io:format/2 函数本身实际上将列表作为其第二个函数,这就是它处理可变数量参数的方式:

print_two_things(ThingOne, ThingTwo) ->
io:format("~tp~n~tp~n", [ThingOne, ThingTwo]).

在您的情况下,您想要接受一个事物列表,将您的名字添加到其中,然后将其打印出来。这是一种方法。

name_in_front(ListOfStrings) ->
NewList = ["James" | ListOfStrings],
io:format("~p~n", [NewList]).

使用 ++ 运算符是另一种(这实际上是递归操作的不同语法,它扩展为完全相同的东西,):

name_in_front(ListOfStrings) ->
NewList = ["James"] ++ ListOfStrings,
io:format("~tp~n", [NewList]).

但这有点愚蠢,因为它旨在以简单的方式将两个字符串连接在一起,在这种情况下,它使语法看起来很奇怪。

另一种方法是更简单地编写一个带有两个参数并完成相同任务的函数:

any_name_in_front(Name, ListOfThings) ->
io:format("~tp~n", [[Name | ListOfThings]]).

[[]]是因为io:format/2接受一个列表作为它的第二个参数,并且你想要传递一个列表 事物(本身是一个列表)到单个格式替换槽(“~tp”部分)中。

需要注意的一点是 Erlang 中大小写很重要。它有一个意义。模块和函数名称是原子,与变量不同。出于这个原因,它们必须是小写的,并且因为它们必须是小写的,所以约定是在单词之间使用下划线而不是使用 CamelCase。因为,呃,erlangIsNotCpp。

在 shell 中尝试一下您想要的函数的简单元素,一旦解决了它们,请将其写入源文件并尝试一下。

关于list - Erlang:打印一个列表,其名称始终位于其前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com