工作了之后就好久没来MMA吧活跃了。最近在学Haskell,看到有篇文章提到说,熟悉一门语言的有效方法是尽可能使用该语言的所有特性来实现其某内置函数的功能,但是除了使用该函数本身。想到MMA,就觉得应该也可以采用该方法来熟悉MMA的特性以及相关函数的使用了。
基于此,我就想到到贴吧里来发起这个游戏,游戏规则很简单:每个人都可以指定一个内置函数,然后尽可能多的采用其他方法(但是除了使用该函数本身)来实现该内置函数的功能,要求实现的功能要完全一致,例如函数A针对所有数据类型进行操作,那么其他实现方式也是要针对所有数据类型都具有一样的功能,这一点非常重要。
当然,其他人也可以对其进行补充,这样于己于人都是一次不错的学习过程。
好了,介绍就到此为止,下面我抛出个引子,例如MMA中选取列表最后一个元素的函数Last,可以采用以下方式来实现:
*******************************************************************************************************************************************
test = {1, "abc", s, "a", Sin[3], 1.34, 6/5};
Fold[#2 &, test]
First[Reverse[test]]
test[[-1]]
test[[-1]]
Nest[Rest, test, Length@test - 1] // First
test //. {x_, y__} :> {y} // First
Take[test, -1] // First
Drop[test, Length@test - 1] // First
TakeDrop[test, -1][[1, 1]]
Pick[test, SparseArray[{Length@test -> 1}], 1] // First
Extract[test, -1]
************************************************************************************************************************************
欢迎大家继续补充,后面的朋友继续 ^_^
基于此,我就想到到贴吧里来发起这个游戏,游戏规则很简单:每个人都可以指定一个内置函数,然后尽可能多的采用其他方法(但是除了使用该函数本身)来实现该内置函数的功能,要求实现的功能要完全一致,例如函数A针对所有数据类型进行操作,那么其他实现方式也是要针对所有数据类型都具有一样的功能,这一点非常重要。
当然,其他人也可以对其进行补充,这样于己于人都是一次不错的学习过程。
好了,介绍就到此为止,下面我抛出个引子,例如MMA中选取列表最后一个元素的函数Last,可以采用以下方式来实现:
*******************************************************************************************************************************************
test = {1, "abc", s, "a", Sin[3], 1.34, 6/5};
Fold[#2 &, test]
First[Reverse[test]]
test[[-1]]
test[[-1]]
Nest[Rest, test, Length@test - 1] // First
test //. {x_, y__} :> {y} // First
Take[test, -1] // First
Drop[test, Length@test - 1] // First
TakeDrop[test, -1][[1, 1]]
Pick[test, SparseArray[{Length@test -> 1}], 1] // First
Extract[test, -1]
************************************************************************************************************************************
欢迎大家继续补充,后面的朋友继续 ^_^