นี่คือตัวอย่างการนับ: ในλ-แคลคูลัสทุกประเภทข้อมูลจะลดลงไปยังฟังก์ชัน calcul-แคลคูลัสไม่มีโหนดหรือพอยน์เตอร์สิ่งเดียวที่มีคือฟังก์ชั่นดังนั้นทุกอย่างจะต้องดำเนินการโดยใช้ฟังก์ชั่น
นี่คือตัวอย่างของการเข้ารหัส booleans เป็นฟังก์ชันที่เขียนด้วย ECMAScript:
const T = (thn, _ ) => thn,
F = (_ , els) => els,
or = (a , b ) => a(a, b),
and = (a , b ) => a(b, a),
not = a => a(F, T),
xor = (a , b ) => a(not(b), b),
iff = (cnd, thn, els) => cnd(thn, els)();
และนี่คือรายการข้อเสีย:
const cons = (hd, tl) => which => which(hd, tl),
first = list => list(T),
rest = list => list(F);
จำนวนธรรมชาติสามารถนำมาใช้เป็นฟังก์ชั่นตัววนซ้ำ
ชุดเป็นสิ่งเดียวกับฟังก์ชั่นลักษณะ (เช่นcontains
วิธีการ)
โปรดทราบว่าการเข้ารหัสคริสตจักรของ Booleans ข้างต้นเป็นจริงว่ามีการใช้เงื่อนไขในภาษา OO เช่น Smalltalk ซึ่งไม่มีบูลีน, เงื่อนไขหรือลูปเป็นภาษาสร้างและใช้พวกเขาอย่างแท้จริงเป็นคุณลักษณะห้องสมุด ตัวอย่างใน Scala:
sealed abstract trait Boolean {
def apply[T, U <: T, V <: T](thn: => U)(els: => V): T
def ∧(other: => Boolean): Boolean
def ∨(other: => Boolean): Boolean
val ¬ : Boolean
final val unary_! = ¬
final def &(other: => Boolean) = ∧(other)
final def |(other: => Boolean) = ∨(other)
}
case object True extends Boolean {
override def apply[T, U <: T, V <: T](thn: => U)(els: => V): U = thn
override def ∧(other: => Boolean) = other
override def ∨(other: => Boolean): this.type = this
override final val ¬ = False
}
case object False extends Boolean {
override def apply[T, U <: T, V <: T](thn: => U)(els: => V): V = els
override def ∧(other: => Boolean): this.type = this
override def ∨(other: => Boolean) = other
override final val ¬ = True
}
object BooleanExtension {
import scala.language.implicitConversions
implicit def boolean2Boolean(b: => scala.Boolean) = if (b) True else False
}
import BooleanExtension._
(2 < 3) { println("2 is less than 3") } { println("2 is greater than 3") }
// 2 is less than 3