2013-05-20 4 views
0

Как я могу определить немецкие умлауты в Эрланге? Я пробовал уже несколько дней, когда читаю текст как список, он просто не получает их. Я попробовал это, напримерErlang define umlauts

change_umlaut(Word) -> change_umlaut(lists:reverse(Word), []). 
change_umlaut([],Acc) -> Acc; 
change_umlaut([H|T],Acc) -> 
if 
    %extended ascii characters 
    H =:= 129 -> change_umlaut(T, ["ue"|Acc]); 
    H =:= 132 -> change_umlaut(T, ["ae"|Acc]); 
    H =:= 148 -> change_umlaut(T, ["oe"|Acc]); 
    %extended ascii characters 
    H == 129 -> change_umlaut(T, ["ue"|Acc]); 
    H == 132 -> change_umlaut(T, ["ae"|Acc]); 
    H == 148 -> change_umlaut(T, ["oe"|Acc]); 
    %literals 
    H == "ü" -> change_umlaut(T, ["ue"|Acc]); 
    H == "ä" -> change_umlaut(T, ["ae"|Acc]); 
    H == "ö" -> change_umlaut(T, ["oe"|Acc]); 
    %else 
    true -> change_umlaut(T, [H|Acc]) 
end; 

он просто передает все аргументы без согласования не до тех пор, правда ... Спасибо за вашу помощь.

+0

Кстати, вам лучше использовать сопоставление с образцом, чем 'if' в Erlang, например' change_umlaut ([$ ü | T), Acc) -> change_umlaut (T, ["ue" | Acc]); '. – Tilman

ответ

1

В Erlang строки обычно содержат кодовые страницы Latin-1 или Unicode, поэтому вы должны искать 228 для «ä», 246 для «ö» и 252 для «ü».

Ваш литералы раздел должен быть сделаны этой работой прозрачно, за исключением того, что H является одиночным символом, за исключением, и вы сравниваете ее строки ("ü", "ä" и "ö"). Соответствующие литералы символов: , и - убедитесь, что ваш исходный файл сохранен как латинский-1 для этого.

+0

эй, спасибо большое. оно работает. Великий! – Morton