簡體   English   中英

Erlang 列表:過濾器返回“\n\f”

[英]Erlang lists:filter returns "\n\f"

我正在研究函數式編程 class 中的一個學校項目。該項目是關於確定一組多米諾骨牌(表示為 1-6 的兩個數字的元組列表)是否可以端到端。 我對這個問題沒意見,但我遇到了一個問題,其中lists:filter返回字符串"\n\f"而不是文檔中所說的列表。

我在網上找不到任何東西,想知道你們是否有任何想法。

謝謝!

這是我的代碼。 問題出在 check_dominos() function 中。

-module(challenge).
-export([test/0, check_dominos/1]).


% If there is an even number of each number, true
% else, false

extract_numbers([]) -> [];
extract_numbers([{First, Second} | T]) -> [First] ++ [Second] ++ extract_numbers(T). 

add_matching_numbers(_Previous, []) -> [];
add_matching_numbers(Previous, [First | T]) when Previous =:= First-> [Previous + First | add_matching_numbers(First, T)];
add_matching_numbers(_Previous, [First | T]) -> add_matching_numbers(First, T).


check_dominos(Dominos) -> 
    All_Numbers = extract_numbers(Dominos),
    Sorted_Numbers = lists:sort(All_Numbers),
    Accumulated_Numbers = add_matching_numbers(0, Sorted_Numbers) ,

    Filter_Lambda = fun(Num) -> Num rem 2 == 0 end,
    Result = lists:filter(Filter_Lambda, Accumulated_Numbers),

    Result.

    % Still working on the logic of this part
    %case length(Accumulated_Numbers) =:= length(Result) of 
    %    true -> true;
    %    _ -> false
    %end.

test() ->
    Test_1 = [{1, 3}, {3, 2}, {2, 1}], % Already in order
    Test_2 = [{5, 2}, {5, 6}, {6, 3}, {1, 4}], % Shouldn't work
    Test_3 = [{2, 6}, {3, 5}, {1, 4}, {3, 4}, {6, 1}, {2, 5}], % Should work

    true = check_dominos(Test_1),
    false = check_dominos(Test_2),
    true = check_dominos(Test_3).

Erlang 字符串是字符代碼列表,默認情況下 Erlang shell 嘗試將整數列表顯示為字符串。 要更改此行為,請調用shell:strings(false). 在運行你的程序之前。

前面的回答者是正確的。 任何僅包含與可打印字符相對應的數字的列表都將顯示為字符串。 你的結果

Accumulated_Numbers = add_matching_numbers(0, Sorted_Numbers)

Test_2上是"\n\f" ,但顯示為列表時它是[10, 12] 嘗試輸入[10, 12]. 在交互式 erlang shell 中,您確實會看到它顯示"\n\f" 嘗試:

[7].

在交互式 Erlang shell 中。對我來說,它顯示:

[7]

嘗試:

[8].

顯示:

"\t"

NB 數字 8 到 13 是可打印字符,數字 32 到 255 也是(其中一些?)。可能會有一些空白。 如果要查看可打印字符的數值,請使用美元符號,例如$\n. 打印10

也就是說,按照您當前的處理方式,您將無法使用add_matching_numbers獲得答案。 只要它與排序列表中的下一項不匹配,它就會丟棄一個值,這不會告訴您是否有任何不匹配的項目。 List_2[10,12]的結果說明了這一點:與其他結果一樣,它是一個偶數列表。

祝你找到解決方案好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM