Bonum Certa Men Certa

How To Write fig Programs

By figosdev

Young programmer



Summary: This is the second in a two-part series on fig

This is the second in a two-part series on fig, an educational language that I use for other practical purposes.



Because I designed fig for computerphobes, you may decide it has a few odd qualities. One example is that it uses a "plus" command instead of + and a "minus" command instead of -. It also has an inline Python feature, which can be used to import Python functions into fig programs, as well as allow more traditional expressions to be evaluated, if you prefer:

python
    import math
    evaluated = math.sqrt(p ** int(s / 2.5))
    fig


Fig has its own function definition command, which you can use to create functions with Python-like scope:

function greet whom
    now = "Hello, " plus whom ; print
    fig


Fig is the standard command that in Python would be unindenting, and it is named for "return to fig programming" after inline Python. In most instances, you can use "next" if you prefer:

function greet whom
    now = "Hello, " plus whom ; print
    next


You can use this as a wrapper around a python feature like this:

function pi
python
    from math import pi as ppi ; return ppi
    fig
    fig   



r = 50 circumference = pi times 2 times r ; print


In fig, the only mandatory punctuation in syntax is "quotes for strings" and # hashes for comments. Decimal points work the same way they do in Python.

These characters are optional, and for the most part can be freely used to help visually organise your code: = ( ) | ; : ,

The vertical bar can be used to introduce students to Bash. With the exception of a few commands that start on their own line -- such as for, next, forin, ifmore, ifless, iftrue, ifequal, else, break, while, wend -- nearly all fig commands share a line with a variable on the far left:

height = 60 ; plus 5 ; str ; len ; print


height is 60, it adds 5 to become 65, is converted to a string: "65" then the length is found, and 2 is printed to the screen.

As in Python, there are a few ways to create arrays:

titles = "" ; arr ; times 100


This will create an array of 100 string items. you can add items like this:

titles plus "A History of Red Hat: From Cottage Industry to Corporation"


Each time a variable is used on the left, it is set to 0-- arrays are the exception:

now 5 print # prints 5
now print # prints 0
now 5 arr 
now print # prints [5]


You can create an array using split:

ingredients = "milk eggs sugar flour water" ; split ingredients " "


Unlike Python, split and join both put the variable to split or join first -- then the thing to split or join it with:

ingredients = "milk eggs sugar flour water" ; split ingredients " "
ingredients = join ingredients " " ; print


Arrays are 1-based (apologies purists, it's an educational language) and for loops are started with count-variable, start-var, stop-var, step-var:

ingredients = "milk eggs sugar flour water" ; split ingredients " "
howmany = ingredients ; len
for each, 1, howmany, 1
    now = each ; print
    next


Forin loops are started with value-tracking-variable, array:

ingredients = "milk eggs sugar flour water" ; split ingredients " "
forin each, ingredients
    now = each ; print
    next


(nextin can be used instead of next)

Files can be opened with arropen, and webpages with arrcurl:

urls = arropen "urls.txt"
buffer = arr ; mid 1 0 # zero-length array
newline = 10 ; chr 



forin each urls iftrue each geteach arrcurl each ; join geteach newline buffer plus geteach fig nextin


Failed downloads create an error, so add error trapping (no, this is not how you should do this in python -- it is just a simple introduction to error trapping)

try
        geteach arrcurl each ; join geteach newline
        buffer plus geteach
except
        geteach ""
        resume


Finally, you can open geany using fig:

openleafpad = "leafpad &" shell


Or get the output of shell commands into an array:

textfiles = "ls *.txt" arrshell


To compile your fig program, give it a .fig extension and run it this way:

$ fig46.py program.fig



$ ./program.fig.py


To get help on a command, type part of it into the help feature:

$ fig46.py help
print


It will return all commands containing "print" in the name. hit enter instead to list all commands.

This will not work:

$ fig46.py help print


This will:

$ echo print | fig46.py help


All commands:

$ echo | fig46.py help


Fig is based on Python 2 -- as much as the Python Foundation is trying to kill Python 2, I think it is a much friendlier language than the latest Python.

PyPy is Python 2 compatible, and is the interpreter fig will most likely to be paired with in the future. There are two factors being waited on: PyPy is planning to support Pygame (an optional component for fig that lets it do real graphics) and Python 2 is still supported by many distros, not least of all Debian, Devuan and Refracta.

The Python Foundation will officially drop Python 2 on January 1. If you love it anyway, try PyPy.

To make fig use PyPy instead, change the two lines that contain the string "env python2" to "env pypy" and that should do it. You can download fig 4.6 here.

Happy Coding!

Licence: Creative Commons cc0 1.0 (public domain)

Recent Techrights' Posts

Fedora is IBM and There's Hardly Any Community Left
It's more like an onboarding mechanism for unpaid labour at (and for) IBM
IBM to Announce 'Results' Shortly, Expect Lots of Chaff Like "Quantum" and "Hey Hi" (Nothing Material to Show)
We're still seeing layoffs and an exodus
 
RMS Was Right 35 Years Ago
Stallman’s viewpoints have remained the same
The Need to Understand the Projection Tactics Against RMS
There's an old and common saying (or "wisdom") about who's guilty when there's a fart in elevators (lifts)
Links 29/01/2026: Neocities Is Blocked by Microsoft, “Intellectual Freedom Centers” as the New "Intelligent Design"
Links for the day
Microsoft XBox Dying Not Only as a Console, Reveals Microsoft
Microsoft is trying to rebrand or repurpose the brand
Don't be Mistaken, Microsoft Boasts About Money That Does Not Exist and Revenue (Buying From Oneself!) Is Not Income
the company's debt grew
IBM's Financial Performance in IBM's Own Words: Money Down, Debt Up Sharply
IBM isn't a healthy company
In Dominica, GNU/Linux Has Risen to All-Time High in 2026
a lot of America is moving to Free software this year
The "Alicante Mafia" - Part XV - EPO is on Strike Tomorrow, Lots to be Angry About (Except Money)
We'll soon finish the series
Gemini Links 29/01/2026: "Lady Audley's Secret" and "The Value Of Our Fear" (Carney's Speech)
Links for the day
Emmanuel Macron on Europe's GAFAM Addiction/Dependence: "There is No Such Thing as Happy Vassalage"
Microsoft has long worked to prevent commodification
It's Official, Mass Layoffs at IBM Again (2026)
In a matter of days we'll just see how much IBM's debt has grown
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Wednesday, January 28, 2026
IRC logs for Wednesday, January 28, 2026
Laos and Microsoft: About 10% Windows, 0% Bing
There are many more nations like it
EPO Technical Meetings Show no Breakthroughs, a Strike Goes Ahead This Friday
Apparently there was another (fourth) meeting today [...] The industrial actions are working already
Google News as the Sole Source of Slop About "Linux", a Feeder of Slopfarms or Serial Sloppers
At least it's no longer hard to 'contain' the slop problem, knowing which domains are the culprits and seeing that Google is their main 'feeder'
Links 28/01/2026: ChatGPT Has Financial Problems, White House Sharing Fakes (or Deepfakes) in Official Accounts/Sites
Links for the day
Gemini Links 28/01/2026: FlatCube NES Port Finished and "Why I Still Write on the Small Web in 2026"
Links for the day
Upcoming Techrights Series About the Public Appearances of Richard M. Stallman (RMS) in the United States
we plan to drop all pretences about "Open Source" and instead focus on Software Freedom
Upcoming Techrights Series About the Experiences of EPO Insiders
We'll start the new series some time next week
Links 28/01/2026: Microsoft Ordered to Stop Spying on School Children, Apple's Brand Tarnished by Its Complicity With Human Rights Abusers
Links for the day
Upcoming Techrights Series About the Failure of the Solicitors Regulation Authority (SRA) to Stop Hired Guns Who Work for Americans That Abuse Women
The SRA has demonstrated nothing but considerable incompetence at many levels
The "Alicante Mafia" - Part XIV - The EPO Vice-President Steve Rowan and the Hidden Alicante Connection is a Big Deal
We'll soon take a closer look at Ernst
Gemini Links 28/01/2026: Particle and AirMIDI
Links for the day
Amandine Jambert (EDPB/CNIL/FSFE), motive for lying, trust in blockchain and encryption
Reprinted with permission from Daniel Pocock
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Tuesday, January 27, 2026
IRC logs for Tuesday, January 27, 2026
Expect More XBox Layoffs Shortly
As expected
Links 27/01/2026: Japan-China Feud Escalates Again, "Iran's Internet Blackout Persists"
Links for the day
Online 'Gathering' Held Today to Organise Industrial Actions in EPO, Strikes Will be Starting Shortly
"Online Extraordinary General Meeting on Action Plan"
It's Not About What You Know, It's About Who You Know (and Stay Quiet About the Cocaine)
This is not an organisation that exists to ensure laws are followed
FOSDEM 2026: democracy panel: FSFE uses women as stooges, gerrymander
Reprinted with permission from Daniel Pocock
Must Use Proprietary JavaScript to Submit Feedback to the European Commission About Moving From GAFAM to Free Software
Nevertheless, go tell them why Software Freedom would benefit Europe's defence and economy
Distortion of the Facts About Mass Layoffs at IBM
more layoffs are ahead
Gemini Links 27/01/2026: "Waiting Isn't a Waste", Posting from Lynx, and Bookmarks
Links for the day
Links 27/01/2026: "Oracle Debt and TikTok Transition Troubles Vex the Ellison Media Empire", Richard Stallman Quoted on Copyrights
Links for the day
Steven Field (Red Hat) Speaks of "Recent Layoff" (RA/Wave) in Red Hat
IBM really doesn't like it when people talk about "RAs"
The "Alicante Mafia" - Part XIII - Is EPO Vice-President Steve Rowan in Cahoots With the "Alicante Mafia"?
that deserves much media attention, political intervention, and condemnation
A Week Ago We Contacted the EPO's Stephen (Steve) Rowan About Cocainegate
Tomorrow we'll write some more about Rowan
“Wikilaundering” Explained
"London PR firm rewrites Wikipedia for governments and billionaires"
IBM Reports 'Results' Tomorrow, Expect More "RAs" (Mass Layoffs)
they use words like "efficiency", "optimisation", "AI", "pivot", "modernisation" and so on
Earlier This Month Microsoft Lunduke Said in Public It Was Good That Renee Good Was Murdered, Now He Mocks or Demonises People for Saying the US is Unsafe
Don't be easily conned by demagogues
Google News and "Linux" Slop
Why won't Google be interested in tackling this issue? Instead Google has been trying to participate in this issue.
IBM Kills Red Hat in the Darkness
What IBM does to Red Hat is malicious
IBM Red Hat's Goal Is Not Real Security (It Probably Never Was)
Spies and trolls are very malicious people and sometimes they're the same thing
With Absurd Lies About Slop, Which Lacks Intelligence or Financial Potential, GAFAM and IBM Will Twist Mass Layoffs as 'Efficiency Drive' or 'AI Pivot'
More layoffs are on the way
Animal Advocacy Works
All it takes is effort and determination
EPO Strike This Week
What has happened to Europe?
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Monday, January 26, 2026
IRC logs for Monday, January 26, 2026