将美元符号表示法转换为点表示法:Haskell代码改写咨询
把Haskell代码转换为点表示法的等效写法
没问题,这个转换其实很直观,用Haskell的函数组合运算符.就能搞定。先拆解下你原来的代码逻辑:
你是先对keywords执行map (elem Emoji.table)操作,再把结果传给print输出。而函数组合.的作用就是把两个函数"串"起来——让前一个函数的输出直接作为后一个函数的输入,刚好匹配这个逻辑。
直接改写的版本
这是和你原代码完全等效的点表示法写法:
print . map (`elem` Emoji.table) $ keywords
另一种更显式的写法(可选)
如果你觉得中缀部分应用(elem Emoji.table)看起来有点绕,也可以用flip把elem的参数顺序调整一下,写成更直白的形式:
print . map (flip elem Emoji.table) $ keywords
为什么这两种写法和原代码等效?
函数组合.的定义很简单:(f . g) x = f (g x)。所以print . map (...)其实是一个新函数,当我们用$把keywords传给它时,就等价于print (map (...) keywords)——和你原来的代码逻辑完全一致。
扩展:写成独立函数
如果想把这个逻辑封装成一个可复用的函数,还可以去掉参数,直接用点表示法定义:
-- 假设keywords是[String]类型,可根据实际情况调整类型签名 printEmojiKeywordCheck :: [String] -> IO () printEmojiKeywordCheck = print . map (`elem` Emoji.table)
之后调用printEmojiKeywordCheck keywords就和你原来的代码效果一模一样啦。
内容的提问来源于stack exchange,提问作者EEE
相关产品推荐
相关产品推荐

