我've been working on the exercises from Dave Thomas' s Programming in Elixir . 我遇到了一个写一个函数(由于某种原因称为 caesar
),它将一个charlist和一个整数添加到charlist中的每个元素,如果它超过'z'则循环回到'a',所以你应该能够称之为
MyList.caesar('ryvke', 13)
它应该返回一个字符串 .
我有一个映射列表并执行添加的函数,但它返回一个charlist,我无法弄清楚如何将其转换为字符串:
defmodule MyList do
def caesar(list, n) do
Enum.map list, &(perform_addition(&1, n))
|> to_charlist
|> to_string
end
defp perform_addition(char_val, n) when char_val < 122 do
char_val + n
end
defp perform_addition(_, n) do
97 + n
end
end
我试过了:
-
阅读关于ElixirSchool的名单
-
尝试将其从charlist转换为二进制文件,然后在遵循this问题后转换为字符串
基于最后一颗子弹的尝试导致:
MyList.caesar('ryvke', 13)
# => <<127, 194, 134, 194, 131, 120, 114>>
1 回答
要回答 Headers 中的问题:您正在寻找
List.to_string/1
:您're not getting a readable string back for those arguments is that your logic to rotate the value is incorrect. Here'如何在不接触非小写字母的情况下穿过
z
时如何移动小写字母并将其旋转回a
的原因:有了这个,你只需要在输入charlist上映射函数,然后调用
List.to_string/1
:该算法称为Caesar Cipher .