Erlang-返回3个参数相等的函数

时间:2019-01-24 18:20:34

标签: erlang

我只是从erlang开始,我有这个类任务来创建一个函数,该函数返回其3个参数相等的数量。示例:

  • countDuplicates(1,2,3)= 0
  • countDuplicates(1,2,2)= 2
  • countDuplicates(2,2,2)= 3

我对此的解决方法是:

#!/bin/bash

NAME="Run.js"
RUN=`pgrep -f $NAME`

while true
do
    if [ "$RUN" == "" ]; then
        echo "Script is not running"
        node $NAME &
    else
        echo "Script is running"
    fi
    sleep 5
done

代码将参数作为列表,然后通过使用usort删除所有重复项来创建另一个list2。

  • A =列表长度
  • B = list2的长度

A-B + 1 =重复数。 如果A-B为0,则保持为0。

这是我解决该问题的新手方法。最优雅的方法是什么?

2 个答案:

答案 0 :(得分:3)

您还可以在重复项功能的开头使用模式匹配:

-module(my).
-compile(export_all).

duplicates(N, N, N) -> 3;
duplicates(N, N, _) -> 2;
duplicates(N, _, N) -> 2;
duplicates(_, N, N) -> 2;
duplicates(_, _, _) -> 0.

duplicates_test() ->
    0 = duplicates(1,2,3),
    2 = duplicates(1,2,2), 
    2 = duplicates(2,2,1),
    2 = duplicates(2,1,2),
    3 = duplicates(2,2,2),
    all_tests_passed.

在外壳中:

~/erlang_programs$ erl
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.3  (abort with ^G)

1> c(my).               
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}

2> my:duplicates_test().
all_tests_passed

3> 

这是erlang众所周知的函数定义。

答案 1 :(得分:1)

我的新手方式将是

countDuplicates(X, Y, Z) ->
    if
        X == Y andalso Y == Z ->
            3;
        X /= Y andalso Y /= Z andalso Z /= X ->
            0;
        true -> 2
    end.