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

No, Writing Isn't in Decline, Some of the Large and Centralised Platforms Are
Slop isn't really competition, just a passing fad and pure noise
The Reputation Issue Is Not Our Fault
Trying to squash words (and people) merely diverts more attention to them
 
The Real GNU Anniversary (Not Manifesto or Announcement) is Today
the development, not the manifesto
GNU/Linux Usage Said to Have Doubled in Oceania
it's hard to discount or dismiss Oceania as a bunch of "coconut islands"
There's No Such Thing as "AI Godfather", Stop Repeating This Pure Nonsense!
Infantile or corruptible media that plays along with slop or uses slop will perish
IBM's CEO Makes No Sense
"IBM CEO Aravind Krishna on what’s really driving tech layoffs"
Gemini Links 05/01/2026: "Poverty and Hunger", "Entrepreneurial Family", "Abandoning Obsidian for Logseq"
Links for the day
Links 05/01/2026: A Shrinking Canadian Economy, Brigitte Bardot's Environmentalism Recalled, Unredacted Epstein Files
Links for the day
Microsoft Allegedly Uses Performance Improvement Plans (PIPs) to Hide the Massive Scale of Company-Wide Layoffs
Just like IBM; they meanwhile talk a bunch of nonsense about "AI" to distract from their commercial calamity
Battles Are Won in the Court of Public Opinion
Many "systems" rely on the mere perception or appearance of legitimacy
GNU/Linux Share in Mongolia More Than Doubles
they probably lack any genuine excitement for "hey hi PCs"
Whistleblowing is About Understanding Boundaries and Risks
The bottom line is, people typically find out the truth at the end
EPO People Power - Part XXV - While EPO Managers Snort Cocaine the Staff Compiles 'Insurance Files' to Expose EPO Corruption
In this increasingly authoritarian world we need more whistleblowers
"The European Patent Reform" That Represents a Gross Violation of Laws, Constitutions, and Conventions (in Order to Make the Rich Even Richer, Mostly Outside Europe)
How far and how long will EPO corruption go?
GNU/Linux Distribution "Ultimate Edition" Fixes Its Web Site (Apparently Compromised Months Ago)
they dealt with the issue before media shame and a catastrophe of trust
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Sunday, January 04, 2026
IRC logs for Sunday, January 04, 2026
Gemini Links 04/01/2026: 64-bit Addressing and 39th Chaos Communication Congress
Links for the day
Windows Was Always the Punchline
What did we count to calculate taxes?
GNU/Linux Surges to About 4% in Peru This Year
one of the poorest counties in America
This Year Our Adoption of IRC Turns 18
We have used IRC for this site since 2008
The Doors Are Closing, Windows Closing Too
Microsoft wants more vendor lock-in, but at risk that this desire will simply alienate and drive away many users
The FSF's Program Manager, Dr. Miriam Sabrina Bastian, Left in October to Lead Climate School
We are not sure why Miriam Bastian decided to leave the Free Software Foundation (FSF)
Outline of Slop, LLMs, IBM, and Things to Come
This coming week and weekend will be very productive irrespective of how much "news" gets published by other sites
Links 04/01/2026: War Without Borders, "Large Hadron Collider Being Shut Down"
Links for the day
Links 04/01/2026: US Imperialism in Greenland and Venezuela, "Climate Protesters Face Greater Risk of Crackdown Amid Rising Authoritarianism"
Links for the day
2026 Should be the Year We All Stop Saying "AI" and Call Things What They Really Are
Don't give anyone the satisfaction of this misguided belief there's any intelligence there
Ponzi Schemes Are Useful (to Corrupt CEOs)
Pathetic, corruptible so-called 'media' is bagging bribes to perpetuate the lies about "AI" (slop)
GNU/Linux at All-Time High in Algeria
In 2026 it hit a new all-time high
Online Mobbing (and Worse) Disguised as 'Free Speech'
People who say they believe in "free speech" have been trying hard to silence RMS and squash the FSF
A 'Cancer That Attaches Itself' to Bulgaria?
"Cancer" is what Microsoft called GNU/Linux
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Saturday, January 03, 2026
IRC logs for Saturday, January 03, 2026
Body-Shaming Using Fakes
a lot of the people who casually claim "defamation" are themselves defaming loads of people every day
GNU/Linux "Market Share" in Switzerland More Than Doubled Last Year, Based on statCounter
GNU/Linux continues its considerable growth
EPO People Power - Part XXIV - Today or Tomorrow You Should Write to National Representatives (Delegates) at the EPO in Your Country
Keep up the pressure!
Red Hat and IBM Layoffs, Staff Kept Quiet About it, WARN Act Skirted/WARN Notices Avoided
What a terrible company to be in
XBox Layoffs Imminent, More Appalling Sales Figures Published
Expect many layoffs in the gaming division
Slop Still Rare
So far a good start for 2026
Gemini Links 03/01/2026: Climbing, Waking Up, and Social Control Media Woes
Links for the day
Links 03/01/2026: Growing Censorship, Another US Invasion, and Will Smith 'Cancelled'
Links for the day
Links 03/01/2026: Twitter Turns From Disinformation Powerhouse to Production and Dissemination of Child Pr0n, "New China Cybersecurity Law Becomes A Reality In 2026"
Links for the day
Gemini Links 03/01/2026: Formatting Text for Gopher and Text-only Websites
Links for the day
Unverified Claim: Mass Layoffs at Microsoft to Start Around Week 3 (or 4) of This Month
Let's wait and see if the claim above is from an insider who has inside knowledge
Firefox Fell Below 1% in Asia
less than 1 in 100 Web users is detected/assumed to be using Firefox
Links 03/01/2026: Ryanair Fines and Facebook Misleads Regulators
Links for the day
New Record High for GNU/Linux in Benelux in 2026
If the above trends stand (throughout the year), then we can begin talking more seriously about a post-GAFAM Europe
In the Search Engine Market, Microsoft is Falling Behind Russia's Yandex
The so-called 'AI industry' is a boy that cries wolf
A Year of Relaxation, But Also of Hardcore Whistleblowing
Expect industrial action some time soon
The More Influential Richard Stallman (RMS) Becomes, the More Aggressive Attacks on Him (and the FSF) Will Get
We've meanwhile noticed disinformation being spread in social control media
GNU/Linux Reaches All-Time High of 5% in Indonesia (Not Counting Chromebooks and Android)
There are also related events in Indonesia and SUSE in particular seems to have been popularised there
EPO People Power - Part XXIII - António Campinos Knows He's Extremely Vulnerable at This Time
Campinos should never have been put in charge
Gemini Links 03/01/2026: New Organisation System (Notebooks) and "2026 Already Off to an Amazing Start"
Links for the day
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Friday, January 02, 2026
IRC logs for Friday, January 02, 2026