几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红。很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,比如 Haskell, Ruby, Groovy, Clojure, Python, C#, F#, CoffeeScript。
每篇文章都令人印象深刻的揭示了这些语言中一些出色优秀的编程特征。编程高手们利用这些技巧提高编程速度、改进软件质量,编程初学者能从这些简洁的预防中学到各种编程语言的真谛。本《震惊小伙伴的单行代码系列》将逐一介绍这些各种编程语言单行代码文章,供大家学习参考。
1. 让列表中的每个元素都乘以2
[X * 2 || X <- lists:seq(1, 11)].
2. 求列表中的所有元素之和
lists:sum(lists:seq(1, 1001)).
3. 判断一个字符串中是否存在某些词
Wordslist = ["scala", "akka", "play framework", "sbt", "typesafe"]. Tweet = "This is an example tweet talking about scala and sbt". [lists:member(S, Wordslist) || S <- string:tokens(Tweet, " ")].
4. 读取文件
file:read_file("ten_one_liners.erl").
5. 祝你生日快乐!
["Happy Birthday " ++ case X of 2 -> "dear Robert"; _ -> "You" end || X <- lists:seq(1, 4)].
6. 过滤列表中的数值
[X || X <- lists:seq(40, 60), X >= 50].
7. 获取XML web service数据并分析
inets:start(). xmerl_scan:string(element(3, element(2, httpc:request("http://search.twitter.com/search.atom?&q=erlang")))).
8. 找到列表中最小或最大的一个数字
lists:min(lists:seq(1, 10)). lists:max(lists:seq(1, 10)).
9. 并行处理
[spawn(fun() -> io:format("~w~n", [X * 2]) end) || X <- lists:seq(1, 10)].
10. “Sieve of Eratosthenes”算法
N = 50. [X || X <- lists:usort(lists:seq(2, N + 1)), not lists:member(X, lists:usort([(P * F) || P <- lists:seq(2, round(math:pow(N, 0.5)) + 2), F <- lists:seq(2, round(N / P))]))].
JavaScript和C++的呢