用 Erlang 實作「不用到第三個變數而交換二個變數的值」

a = (a^b)^(b=(a^b)^b);

此為一行 C 語言程式,可以交換二個數字。

我用 Erlang 語言,寫下上述這一行程式的計算原理,並且以單元測試隨意舉例示範。程式可見於以下位置。

儲存位置:

http://github.com/yauhsien/work.git

程式檔案清單:

  1. include/assignment.hrl
  2. src/xor_.erl
  3. test/xor_tests.erl

主要程式段落:

-record(binding(A, B), {A, B}).
-export([swap/2]).
swap(?binding(A, N), ?binding(B, M)) ->
    Maxb = meet_axb(N, M),
    BindingB1 = ?binding(B, Maxb(M)),
    {_, M1} = BindingB1,
    BindingA1 = ?binding(A, Maxb(M1)),
    {BindingA1, BindingB1}.
meet_axb(N, M) ->
    K = N bxor M,
    fun(S) ->
        K bxor S
    end.

我想,這樣應該很清楚吧!

 

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Erlang, Introduction, Strip。將永久鏈結加入書籤。