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