Как Вы делаете по модулю или остаток в Erlang?

В sbt конфликты между библиотеками настраиваются с помощью диспетчера конфликтов. По умолчанию выбрана последняя ревизия, но это также можно переопределить в файле .sbt:

conflictManager := ConflictManager.strict

Если вы используете sbt 0.13.6 или выше, вы будете предупреждены, если у вас есть несовместимый бинарная версия между вашими зависимостями. В этой ситуации вы можете настроить переопределение в вашем sbt-файле для конкретной библиотеки:

dependencyOverrides += "org.raman" % "Z" % "x.11"

Это заставит разрешенную версию Z на x.11, но не приведет к прямой зависимости.

43
задан Matt 13 May 2009 в 14:47
поделиться

5 ответов

В Эрланге, 5 rem 3. дает 2 и -5 rem 3. дает -2 . Если я понимаю ваш вопрос, вам нужно -5 rem 3. вместо 1 дать 1, поскольку -5 = -2 * 3 + 1.

Это делает то, что вы хотите?

mod(X,Y) when X > 0 -> X rem Y;
mod(X,Y) when X < 0 -> Y + X rem Y;
mod(0,Y) -> 0.
40
ответ дан 26 November 2019 в 22:50
поделиться

erlang оператор по модулю rem

Eshell V5.6.4  (abort with ^G)
1> 97 rem 10.
7
28
ответ дан Alnitak 12 November 2019 в 09:09
поделиться

Согласно это сообщение в блоге , это rem.

3
ответ дан Jon Skeet 12 November 2019 в 09:09
поделиться

Остаток Эрланга не работает с отрицательными числами, поэтому вам нужно написать свою собственную функцию для отрицательных параметров.

1
ответ дан 26 November 2019 в 22:50
поделиться

Вышеупомянутое Y + X rem Y кажется неправильным: либо (Y + X) rem Y, либо Y + (X rem Y) дают неверный результат полученные результаты. Пример: пусть Y = 3. Если X = -4, первая форма возвращает -1, если X = -3 вторая форма возвращает 3, ни одно из которых не находится в [0; 3 [.

Вместо этого я использую это:

% Returns the positive remainder of the division of X by Y, in [0;Y[. 
% In Erlang, -5 rem 3 is -2, whereas this function will return 1,  
% since -5 =-2 * 3 + 1.

modulo(X,Y) when X > 0 ->   
   X rem Y;

modulo(X,Y) when X < 0 ->   
    K = (-X div Y)+1,
    PositiveX = X + K*Y,
    PositiveX rem Y;

modulo(0,_Y) -> 
    0.
2
ответ дан 26 November 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: