# function的声明方法# 第一种
function myadd(x, y)
x + y
end function
# myadd(2,3) = 5# 第二种
f(x, y) = x * y
# f(2, 3) = 6# 第三种
f = x -> x / 10 # 这种形式的函数貌似只能是单变量函数
# f(1) = 1 / 10 = 0.1# Duck-typing# 声明如下函数
function f( x )
x^2
end
x = rand(3,3)
# 则f(x) = matmul(x,x)# 下面的情况会报错
v = rand(3)
# f(v)表示两个三行一列的向量相乘,会报错# 如果想让两个大小相同的向量相乘,应该为v.*v。点积# Mutating vs. non-mutating functions# 这里用函数sort来举例
a = rand(10)
sort(a)的返回值是将a的元素按从小到大的顺序排列,但a保持不变
sort!(a)的返回值是将a的元素按从小到大的顺序排列,并且其返回值与a捆绑
# map与broadcast# map的一般用法如下# map( f, v ) 或 map( f, A )# 表示对向量v或矩阵A的元素进行函数f映射
v = [1,2,3]
f = x -> x.^2 # 注意这里写成.^和^都可以,因为map是将后面向量或矩阵的元素(不是整个向量或矩阵)在f上的映射
map(f, v)
map(f, A)
# broadcast与map类似,是map的一般化形式。它可以做map能做到的任何事,语法与map相同# 其中,对向量或是矩阵的元素进行函数f映射,也可以写成下面的形式
f.(v)
f.(A)