我试过谷歌搜索它,但我找不到一个简单的解释.谁能解释一下这个功能是如何工作的
import Data.Char
encode :: Int -> String -> String
encode offset msg = map (chr . (+ offset) . ord) msg
Run Code Online (Sandbox Code Playgroud)
我知道它正在映射(chr . (+ offset) . ord)函数msg,但内部发生了什么(chr . (+ offset) . ord).
首先要注意的是有3个函数组合在一起,并将按此顺序组成:
1. ord
2. (+ offset)
3. chr
Run Code Online (Sandbox Code Playgroud)
第一个将字符转换为数字.第二个将为数字添加偏移量.第三个将数字转换回一个字符.链接在一起他们按照命令式风格行事如下:
function encodeChar(int ord)
{
x = ord
y = x + offset
z = chr y
return z
}
Run Code Online (Sandbox Code Playgroud)
该(+ offset)notiation给出了一个功能,因为+有两个参数,一个是被应用.另一个尚未应用.所以你得到一个Int -> Int功能.
组合的三个函数给出一个函数,它接受a Char并返回a Char,因此可以映射到Chars 的列表,即a String.