[英]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.