SlideShare une entreprise Scribd logo
1  sur  42
On Functional Programming
   A Clojurian Perspective

         Raju Gandhi
Disclaimers
Disclaimers


I tend to speak fast
Disclaimers


I tend to speak fast
I may have an accent
(struct-map Speaker
:name "raju",
:pronunciation "/raa-jew/",
:description ["java/ruby developer",
              "technophile",
              "language geek"],
:profiles {:twitter "looselytyped"
           :facebook "raju.gandhi"})
About us...

Small consulting/training/mentoring shop
Based out of Ohio and Arizona
Specialize in open-source technologies -
Java/Ruby/Rails/Groovy/Grails
Clojure?

Lisp on the JVM
Dynamic
Excellent concurrency support
Strong Java inter-op
Lazy*
Clojure Syntax


  A whirlwind tour
Clojure Syntax
;lists - these are special
'(+ 1 2 1/3)
;a comment
["this" "is" "a" "vector"]
;commas are whitespace
{:yes true, :no false, :null nil}
;sets
#{a e i o u}
Clojure Syntax
;lists - these are special
'(+ 1 2 1/3)
;a comment
["this" "is" "a" "vector"]
;commas are whitespace
{:yes true, :no false, :null nil}
;sets
#{a e i o u}
Clojure Syntax
;lists - these are special
'(+ 1 2 1/3)
;a comment
["this" "is" "a" "vector"]
;commas are whitespace
{:yes true, :no false, :null nil}
;sets
#{a e i o u}
Clojure Syntax
;lists - these are special
'(+ 1 2 1/3)
;a comment
["this" "is" "a" "vector"]
;commas are whitespace
{:yes true, :no false, :null nil}
;sets
#{a e i o u}
Clojure Syntax
;lists - these are special
'(+ 1 2 1/3)
;a comment
["this" "is" "a" "vector"]
;commas are whitespace
{:yes true, :no false, :null nil}
;sets
#{a e i o u}
LISt Processing
;can be a regular function
;Yes! + is a function :)
(+ 1 2 3)
;or a special form
(if (< x 3) "less than 3" "or not")
;or a macro
(defn say-hello [name]
  (str "Hello, " name))
LISt Processing
;can be a regular function
;Yes! + is a function :)
(+ 1 2 3)
;or a special form
(if (< x 3) "less than 3" "or not")
;or a macro
(defn say-hello [name]
  (str "Hello, " name))
LISt Processing
;can be a regular function
;Yes! + is a function :)
(+ 1 2 3)
;or a special form
(if (< x 3) "less than 3" "or not")
;or a macro
(defn say-hello [name]
  (str "Hello, " name))
LISt Processing
;can be a regular function
;Yes! + is a function :)
(+ 1 2 3)
;or a special form
(if (< x 3) "less than 3" "or not")
;or a macro
(defn say-hello [name]
  (str "Hello, " name))
LISt Processing
;can be a regular function
;Yes! + is a function :)
(+ 1 2 3)
;or a special form
(if (< x 3) "less than 3" "or not")
;or a macro
(defn say-hello [name]
  (str "Hello, " name))
LISt Processing
;can be a regular function
;Yes! + is a function :)
(+ 1 2 3)
;or a special form
(if (< x 3) "less than 3" "or not")
;or a macro
(defn say-hello [name]
  (str "Hello, " name))
LISt Processing
;can be a regular function
;Yes! + is a function :)
(+ 1 2 3)
;or a special form
(if (< x 3) "less than 3" "or not")
;or a macro
(defn say-hello [name]
  (str "Hello, " name))
Homoiconicity

;defining a function
(defn say-hello [name]
  (str "Hello, " name))
Homoiconicity

;defining a function
(defn say-hello [name]
  (str "Hello, " name))
Homoiconicity

;defining a function
(defn say-hello [name]
  (str "Hello, " name))
Homoiconicity

;defining a function
(defn say-hello [name]
  (str "Hello, " name))
Homoiconicity



code == data
What is FP?
What is FP?

What is OOP???
What is FP?

What is OOP???
Functional programming
What is FP?

What is OOP???
Functional programming
 Functions are first class citizens
Why FP?

Compartmentalize
Better re-use
Referential Transparency
 Easier to test
Easier to parallelize
Clojure’s Approach

 Side effects are explicit
 State manipulation via
  Persistent data-structures
  Multiple reference types with
  appropriate semantics
Declaring Functions

;explicit definition
(defn times-2
  "Multiplies its arg by 2"
  [n]
  (* 2 n))
Declaring Functions


;alternate approach
;no docs though
(def times-2
     (fn [n] (* 2 n)))
Declaring Functions



;anonymous function
(map #(* 2 %) [1 2 3])
Declaring Functions



;anonymous function
(map #(* 2 %) [1 2 3])
Consuming Functions


;map takes ([f coll] ...)
(map times-2 [1 2 3])
;> (2 4 6)
Consuming Functions


;map takes ([f coll] ...)
(map #(* 2 %) [1 2 3])
;> (2 4 6)
Consuming Functions


;reduce takes ([f coll] ...)
(reduce + [1 2 3])
;> 6
Functions Everywhere

([4 5 6] 0)
;> 4
(#{a e i o u} a)
;> a
({:yes true, :no false, :null nil} :yes)
;> true
(:yes {:yes true, :no false, :null nil})
;> true
A Small Digression


(let [x 1, y 2] (str x " " y))
;> ”1 2”
(let [[x y] [1 2]] (str x " " y))
;> "1 2"
(let [[x & more] [1 2 3]] (str x " " more))
;> "1 (2 3)"
Looping
(defn min-in-coll [x & more]
  (loop [min x
          [f & others] more]
    (if f
      (recur (if (< min f) min f) others)
      min)))

;(min-in-coll [3 4 2 -1])
;> -1
Thanks!

Contenu connexe

Tendances

Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.Mike Fogus
 
Opa presentation at GamesJs
Opa presentation at GamesJsOpa presentation at GamesJs
Opa presentation at GamesJsHenri Binsztok
 
Javascript development done right
Javascript development done rightJavascript development done right
Javascript development done rightPawel Szulc
 
The Macronomicon
The MacronomiconThe Macronomicon
The MacronomiconMike Fogus
 
The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196Mahmoud Samir Fayed
 
String functions
String functionsString functions
String functionsNikul Shah
 
Fun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming languageFun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming languagePawel Szulc
 
Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mark Needham
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Cycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveCycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveEugene Zharkov
 

Tendances (19)

Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
 
Opa presentation at GamesJs
Opa presentation at GamesJsOpa presentation at GamesJs
Opa presentation at GamesJs
 
Android Guava
Android GuavaAndroid Guava
Android Guava
 
Javascript development done right
Javascript development done rightJavascript development done right
Javascript development done right
 
Introduzione a C#
Introduzione a C#Introduzione a C#
Introduzione a C#
 
The Macronomicon
The MacronomiconThe Macronomicon
The Macronomicon
 
Linq introduction
Linq introductionLinq introduction
Linq introduction
 
The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196
 
Clojure入門
Clojure入門Clojure入門
Clojure入門
 
Rakudo
RakudoRakudo
Rakudo
 
String functions
String functionsString functions
String functions
 
C# 7
C# 7C# 7
C# 7
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
 
Fun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming languageFun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming language
 
Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Cycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveCycle.js: Functional and Reactive
Cycle.js: Functional and Reactive
 
Intro to F#
Intro to F#Intro to F#
Intro to F#
 
Haskell
HaskellHaskell
Haskell
 

En vedette

für dilay
für dilayfür dilay
für dilayemre6606
 
WordCamp Romania 2010 - mobile web si WordPress
WordCamp Romania 2010 - mobile web si WordPressWordCamp Romania 2010 - mobile web si WordPress
WordCamp Romania 2010 - mobile web si WordPressAndrei Diaconu
 
Fran Mancia Use/Creation JPAs
Fran Mancia Use/Creation JPAsFran Mancia Use/Creation JPAs
Fran Mancia Use/Creation JPAsContract Cities
 
Ky Nang Giao Quyen
Ky Nang Giao QuyenKy Nang Giao Quyen
Ky Nang Giao QuyenThuong HL
 

En vedette (6)

für dilay
für dilayfür dilay
für dilay
 
WordCamp Romania 2010 - mobile web si WordPress
WordCamp Romania 2010 - mobile web si WordPressWordCamp Romania 2010 - mobile web si WordPress
WordCamp Romania 2010 - mobile web si WordPress
 
Web Analytics
Web AnalyticsWeb Analytics
Web Analytics
 
Fran Mancia Use/Creation JPAs
Fran Mancia Use/Creation JPAsFran Mancia Use/Creation JPAs
Fran Mancia Use/Creation JPAs
 
Brochure
BrochureBrochure
Brochure
 
Ky Nang Giao Quyen
Ky Nang Giao QuyenKy Nang Giao Quyen
Ky Nang Giao Quyen
 

Similaire à On Functional Programming - A Clojurian Perspective

Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - StockholmJan Kronquist
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Jonas Bonér
 
Pragmatic Real-World Scala
Pragmatic Real-World ScalaPragmatic Real-World Scala
Pragmatic Real-World Scalaparag978978
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Introthnetos
 
From Javascript To Haskell
From Javascript To HaskellFrom Javascript To Haskell
From Javascript To Haskellujihisa
 
Scala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecScala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecLoïc Descotte
 
From Java To Clojure (English version)
From Java To Clojure (English version)From Java To Clojure (English version)
From Java To Clojure (English version)Kent Ohashi
 
Predictably
PredictablyPredictably
Predictablyztellman
 
Clojure made simple - Lightning talk
Clojure made simple - Lightning talkClojure made simple - Lightning talk
Clojure made simple - Lightning talkJohn Stevenson
 
(first '(Clojure.))
(first '(Clojure.))(first '(Clojure.))
(first '(Clojure.))niklal
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?osfameron
 
Javascript basics
Javascript basicsJavascript basics
Javascript basicsFin Chen
 
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVMClojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVMsunng87
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghStuart Roebuck
 
Thinking Functionally In Ruby
Thinking Functionally In RubyThinking Functionally In Ruby
Thinking Functionally In RubyRoss Lawley
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovGeorgiy Shevtsov
 

Similaire à On Functional Programming - A Clojurian Perspective (20)

Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - Stockholm
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
Pragmatic Real-World Scala
Pragmatic Real-World ScalaPragmatic Real-World Scala
Pragmatic Real-World Scala
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
 
From Javascript To Haskell
From Javascript To HaskellFrom Javascript To Haskell
From Javascript To Haskell
 
Groovy
GroovyGroovy
Groovy
 
Scala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecScala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar Prokopec
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
 
From Java To Clojure (English version)
From Java To Clojure (English version)From Java To Clojure (English version)
From Java To Clojure (English version)
 
Predictably
PredictablyPredictably
Predictably
 
Clojure made simple - Lightning talk
Clojure made simple - Lightning talkClojure made simple - Lightning talk
Clojure made simple - Lightning talk
 
(first '(Clojure.))
(first '(Clojure.))(first '(Clojure.))
(first '(Clojure.))
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?
 
Groovy.pptx
Groovy.pptxGroovy.pptx
Groovy.pptx
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
 
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVMClojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVM
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
 
JavaScript @ CTK
JavaScript @ CTKJavaScript @ CTK
JavaScript @ CTK
 
Thinking Functionally In Ruby
Thinking Functionally In RubyThinking Functionally In Ruby
Thinking Functionally In Ruby
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George Shevtsov
 

Dernier

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 

Dernier (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

On Functional Programming - A Clojurian Perspective