[Functional Programming] Add, Mult, Pow, isZero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | const log = console.log; // zero :: &fa.a const zero = f => x => x; // zero is F // once :: &fa.fa const once = f => x => f(x); // once it I // twice :: &fa.f(fa) const twice = f => x => f(f(x)); // thrice :: &fa.f(f(fa)) const thrice = f => x => f(f(f(x))); const T = true ; const F = false ; const I = x => x; const not = x => !x; const K = x => y => x log(zero(not)(T)) // true, because only return second arguement log(once(not)(T)) // false log(twice(not)(F)) // false log(thrice(not)(T)) // false log( '****' ) /** SUCCSOR SUCC N1 = N2 SUCC N2 = N3 SUCC(SUCC N1) = N3 SUCC &fa.fa = &fa.f(fa) SUCC N2, then n is 2, do f n times, then add one f more */ const _succ = n => f => x => f(n(f)(x)); // conver chunch number to JS number. // jsnum :: take a chunch number, call (x => x + 1) n times, and start from 0. const jsnum = n => n(x => x + 1)(0); log(_succ(zero)(not)(T)) // false log(jsnum(_succ(zero))) // 1 log(jsnum(_succ(_succ(zero)))) // 2 const n0 = zero; const n1 = once; const n2 = twice; const n3 = thrice; const n4 = _succ(thrice); log(jsnum(_succ(n2))) // 3 const B = f => g => a => f(g(a)); const succ = n => f => B(f)(n(f)); // Add N1 N4 = succ(N4) // Add N2 N4 = succ(succ(N4)) // Add N3 N4 = succ(succ(succ(N4))) // Add N3 N4 = (succ.succ.succ) N4 === N3 succ N4 const add = n => k => n(succ)(k); console.log(jsnum(add(n3)(n4))); // 7 const mult = B; // mult = B console.log(jsnum(mult(n2)(n3))) // Thrush $af.fa = CI (Cardinal Idiot, flip the arguements) const pow = n => k => k(n); console.log(jsnum(pow(n2)(n3))); // 8 // isZero :: $n.n(f)(args) // is n = 0, f won't run, just return args // Then args should be T // $n.n(f)(T), now if n > 0, f will be run, // we want it always return F // K(F), constant(F) // $n.n(K(F))(T) const isZero = n => n(K(F))(T) console.log(isZero(n0)) // true console.log(isZero(n1)) // false |
succ :: Doing N + 1 times fn.
add :: Doing N times succ, based on K
mult :: is B
pow :: or Thrush, is flip
isZero :: return just T otherwise K(F) , K is constant
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-05-13 [React] Update Application State with React Apollo ApolloConsumer Component
2016-05-13 [Javascript] Writing conventional commits with commitizen
2016-05-13 [Javascript] Automating Releases with semantic-release
2015-05-13 [Whole Web] [Node.js, PM2] Controlling runaway apps using pm2
2015-05-13 [AngularJS] angular-formly: Default Options