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

Oligarchs and States Always Attempted to Obstruct Efforts to Expose Their Corruption
We commend the administrator who consistently and adamantly defend the freedom of speech
GNU/Linux Exceeding 5% in Guadeloupe According to statCounter
GNU/Linux "share" estimates in Guadeloupe
EPO People Power - Part XXXII - Little Hope That European Press Will Attempt to Expose Drug Abuse in Europe's Second-Largest Organisation
What does this tell us about the press in Europe?
IBM SkillsBuild as Microsoft Training, Microsoft Vendor Lock-in, Microsoft Surveillance
Microsoft benefits from IBM's "training"
 
Links 12/01/2026: Vista 11 Exodus and Famicom/NES Game
Links for the day
Links 12/01/2026: Twitter (X) Being Blocked in More Countries, PTAB Besieged by Cheeto Appointees (Bad Patents Getting Through)
Links for the day
Links 12/01/2026: Brussels Plotting Exit From GAFAM (US), Carole Cadwalladr Explains "Peter Thiel's New Model Army"
Links for the day
Scheduled Maintenance Between 15th of January and Days to Follow, Free Software Foundation (FSF) Looking to Add 43 More Members by 16th of January
People who value Software Freedom should consider joining to support the FSF
Bracing for Microsoft Layoffs, Tired of Microsoft Lies, Microsoft Staff Wants Transparency, Not Face-Saving Coverup From Frank Shaw
totally made up stock price
GNU/Linux Estimated at Around 5% in Montserrat
another country where the "share" of GNU/Linux is now measured at 5%
Dr. Richard Stallman @ Georgia Tech Next Week
More Than One Week From Now
Three most controversial Australian authors linked to St Paul's, Coburg
Reprinted with permission from Daniel Pocock
Links 11/01/2026: Data Breaches and Recent (Early 2026) Political Developments
Links for the day
Gemini Links 12/01/2026: Insomniacs After School and Boycotting Amazon
Links for the day
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Sunday, January 11, 2026
IRC logs for Sunday, January 11, 2026
Brett Wilson LLP 'Dropping' the LLP, Is This Rebranding?
It's not a coincidence or a glitch, there was a formal change somewhere in the system
Can IBM Still Control the Narrative?
We'll see what comes out through the grapevine later this week
EPO People Power - Part XXXI - Almost No Crime is Possible Without Enablers and Complicit Colleagues
By the middle of January 2026 we'll have taken things up another gear
Aruba's GNU/Linux Adoption Seems to Have Reach All-Time High This Year
ChromeOS rose by a lot too
After the LLM Slop Frenzy...
In every way, slop is no better than spam
Links 11/01/2026: 'Nothing to Lose' in Iran and Kyiv Restores Electricity
Links for the day
Gemini Links 11/01/2026: "Late To The Party" and "Thinking About Software Licences"
Links for the day
Links 11/01/2026: Bob Weir and Stewart Cheifet Perish
Links for the day
Higher Adoption Rates of GNU/Linux in Cyprus in Recent Years
there are some Cypriots who are championing Free software
Microsoft's linkedin.com is Shrinking, Expect LinkedIn Layoffs to Carry on in 2026
Expect the mass layoffs and office closures to carry on there, maybe as early as next week
Gemini Links 11/01/2026: Scott Morgan and 'The Unix Way'
Links for the day
IBM to Be 'Reorganised'
The rich look for ways to 'monetise' what's left IBM
Dr. Andy Farnell Explains Why He'll Stop Sending E-mail to Microsoft and Gmail Users
The article is long and well worth reading
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Saturday, January 10, 2026
IRC logs for Saturday, January 10, 2026
Monday, January 12, Red Hat Layoffs Allegedly Planned
We'll update this post or follow up if or when we get more information
Slop Still Becoming Rare as Another Week Ends
Generally speaking, calm and quiet is desirable, it's what we hope for (an absence of slop, a lack of need to keep abreast of it, ultimately)
Links 10/01/2026: Iran Offline, Venezuelans Decry Civilian Casualties
Links for the day
GAFAM Wants War
Go war! Go bailouts! Go debt! Go Wall Street!
GNOME Foundation's Microsoft Developer Account
"Lately they're teaming up with Mozilla to eliminate middle click paste - something which I use continuously."
GNU/Linux and Chromebooks Rose to Almost 10% in Haiti
What's noteworthy is that this month GNU/Linux is measured at around 8% and ChromeOS at about 2%
Links 10/01/2026: "Abolish ICE or GTFO", Calls to Ban X/Twitter From Apple/Google App Stores (or Implement National Blocks) Over MElon Turning It Into Non-consensual Deepfake Porn Site
Links for the day
EPO People Power - Part XXX - New Year Starts, Cocainegate Still Discussed a Lot, António Campinos Desperate for Distraction From It
Why the sudden change or 'generosity'? [...] Actual cocaine addicts caused nervous breakdowns among sober people
2026 Might be the Year Microsoft Replaces Layoffs With Mass Firings (No Severance Payments to Dismissed Staff)
It's hard to "see" PIPs unless insiders blow the whistle
IBM and Microsoft Hiding Layoffs in Similar, Overlapping Ways
Performance Improvement Plans aplenty
IBM is a Cancer That Attaches Itself to Everything
Red Hat should have remained an independent company
Links 10/01/2026: STV Layoffs (Scottish TV), “CBS Evening News” in Chaos (Culls and Censorship by the US Regime)
Links for the day
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Friday, January 09, 2026
IRC logs for Friday, January 09, 2026
Gemini Links 10/01/2026: Blackout, E-Waste, and Secondary Smartphone
Links for the day