【问题标题】:Erlang: Printing a List with a name always in front of itErlang:打印一个名称总是在它前面的列表
【发布时间】:2015-09-07 07:36:06
【问题描述】:

我刚开始学习 Erlang,如果这个问题看起来有点简单,请多多包涵。

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

我正在编写一个 Erlang 函数,该函数应该将一个列表作为参数,然后打印带有我名字的列表。就这个问题而言,假设我的名字是“James”。

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

这是我目前的代码:

-module(testmodule).

-export([NameInFront/1]).

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

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

【问题讨论】:

    标签: list erlang


    【解决方案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]).
    

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

    另一种方法是更简单地编写一个接受两个参数并完成相同事情的函数:

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

    [[]] 是因为 io:format/2 将列表作为其第二个参数,并且您希望将 one 事物的列表(本身是列表)传递到单个格式替换槽( “~tp”部分)。

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

    用你想要的函数的简单元素在 shell 中玩一下,一旦你把它们写到源文件中试试看。

    【讨论】:

      猜你喜欢
      • 2016-02-19
      • 2021-08-10
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 2021-12-20
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多