Skip to content

olekscode/BlockClosureLogicalOperations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logical Operations on Block Closures

Build Status Build status Coverage Status License

This repository contains a simple extension of Pharo's BlockClosure with basic operations of Boolean algebra. It allows us to decompose complex logical queries into meaningful parts that can be reused.

How to install it?

To install BlockClosureLogicalOperations, go to the Playground (Ctrl+OW) in your Pharo image and execute the following Metacello script (select it and press Do-it button or Ctrl+D):

Metacello new
  baseline: 'BlockClosureLogicalOperations';
  repository: 'github://olekscode/BlockClosureLogicalOperations/src';
  load.

How to depend on it?

If you want to add a dependency on BlockClosureLogicalOperations to your project, include the following lines into your baseline method:

spec
  baseline: 'BlockClosureLogicalOperations'
  with: [ spec repository: 'github://olekscode/BlockClosureLogicalOperations/src' ].

If you are new to baselines and Metacello, check out the Baselines tutorial on Pharo Wiki.

How to use it?

Let's define several logical blocks closures:

isPositive := [ :x | x > 0 ].
isOdd := [ :x | x % 2 = 1 ].

isTestClass := [ :aClass | aClass inheritsFrom: TestCase ].
isEmptyClass := [ :aClass | aClass methods isEmpty ].

They evaluate to Boolean values:

isOdd value: 2. "false"
isTestClass value: ConditionTest. "true"

We can manipulate and combine those blocks using all basic operations of boolean algebra: AND, OR, NOT, XOR, IMPLIES, and EQUALS:

isPositiveOrOdd := isPositive or: isOdd.
isEmptyTestClass := isTestClass and: isEmptyClass.

alwaysTrue := (isOdd not or: isPositive) logicalEquals: (isOdd implies: isPositive).

Any combination of logical block closures is also a logical block closure:

isEmptyTestClass value: ConditionTest. "false"
isPositiveOrOdd value: -1. "true".
alwaysTrue value: (Random new next). "true"

About

Extension of Pharo's BlockClosure with basic operations of Boolean algebra

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published