SIMD与函数式
SIMD
"单指令,多数据",主要用在3D图形运算,物理模拟等项目中。
//可以实现数组的一次性相加
var a = SIMD.Float32x4(1, 2, 3, 4);
var b = SIMD.Float32x4(5, 6, 7, 8);
var c = SIMD.Float32x4.add(a, b); // Float32x4[6, 8, 10, 12]
//通常可以使用在矢量运算上:
v + w = 〈v1, …, vn〉+ 〈w1, …, wn〉
= 〈v1+w1, …, vn+wn〉
数据类型如Float32x4:四个 32 位浮点数
,SIMD支持各种数学运算
函数式
- 柯里化把一个多参数函数拆成一系列单参数函数。
function add (a) {
return function (b) {
return a + b;
}
}
// 或者采用箭头函数写法
const add = x => y => x + y;
const f = add(1);
f(1) // 2
- 函数合成:
const compose=f=>g=>x=>f(g(x));
const f=compose(x=>x*4)(x=>x+2);
f(2);
- 参数倒置:改变函数前两个参数的顺序。
var three = (a, b, c) => [a, b, c];
var flip = f.flip(three);
flip(1, 2, 3); // => [2, 1, 3]
- 执行边界(until)指的是函数执行到满足条件为止。
condition = x => x === 5;
until = f.until(condition, inc);
until(3) // 5
- 队列操作
f.head(5, 27, 3, 1) // 5
f.last(5, 27, 3, 1) // 1
f.tail(5, 27, 3, 1) // [27, 3, 1]
f.init(5, 27, 3, 1) // [5, 27, 3]
- 合并操作:
f.concat([5], [27], [3]) // [5, 27, 3],把多个数组合并为一个
f.concatMap(x => 'hi ' + x, 1, [[2]], 3) // ['hi 1', 'hi 2', 'hi 3'],处理后合并为一个
- 配对操作:
zip
把两个队列的成员一一配对合并为一个队列,不等长的话会把多出来的成员忽略,zipwith
第一个参数是函数。
let a = [0, 1, 2];
let b = [3, 4, 5];
let c = [6, 7, 8];
f.zip(a, b) // [[0, 3], [1, 4], [2, 5]]
f.zipWith((a, b) => a + b, a, b, c) // [9, 12, 15]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)