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

When Lunatics Attack Your Family (Especially Women)
The attacks on my wife and my mom are rather revealing. These are acts of extreme misogyny.
Linux is Released Too Often, Tested Insufficiently (Same as Chromium, Firefox, and Systemd)
Driven by schedule, not quality (objective criterion)
 
Don’t Use Disney Minus. (Disney “Plus”)
Reprinted with permission from Ryan Farmer
Links 13/05/2024: Wikimedia Rides Hype Wave, XBox Expected to Go Through More Layoffs This Summer (July)
Links for the day
Gemini Links 13/05/2024: Kingdom of the Dead and Narrative Adventure Game Gem
Links for the day
Visually Enhanced Interviews With ESR and RMS on Free Software (With French)
Nom de code - Linux
IRC Proceedings: Sunday, May 12, 2024
IRC logs for Sunday, May 12, 2024
Over at Tux Machines...
GNU/Linux news for the past day
GNU/Linux Rises to Record High in Macao
iOS and Android are very big there
Debian: Let's Pretend We Never Knew Daniel Pocock
Ad hominem is what happens when the message is hard to dispute
DPL Sam Hartman proves blackmail is alive and well in Debian
Reprinted with permission from disguised.work
What is a safe space?
Reprinted with permission from the Free Software Fellowship
Does Debian deserve an independent news service?
Reprinted with permission from disguised.work
Linux.com So Neglected If Not Abandoned That It Promotes Deals That Expired 4 Weeks Ago
Quite some "stewardship" by the Linux Foundation
The Fall of Meritocracy in Tech
nuff said
Microsoft Has Lost Malta
Android has caught up
In Asia, Baidu Has Become Bigger Than Bing and Yandex is Getting There Too
XBox and Bing are going through existential crises
"Having IBM Next to Your Name is a Scarlet Letter"
IBM staff just motivated not to work
Techrights Browsing Made Easier
a draft for discussion
Links 12/05/2024: XBox Founders Say Microsoft Lost Its Identity
Links for the day
Gemini Links 12/05/2024: Enshitification and Mind Maps
Links for the day
Aside From Red Hat Spam and Partisan Media There's a Lingering Rumour of Layoffs
Some rumour said IBM had second thoughts about a WARN notice and delayed that a bit
The Albanian open source community is very healthy indeed
Windows nosedives from 99.1% to a lot less
When I discovered people trafficking in open source software
Reprinted with permission from Daniel Pocock
Web Sites Hijacked by WIPO on Behalf of Microsoft-Sponsored SPI (and People Looking to Hide Embarrassing Facts)
debian.chat; debiancommunity.org; debian.day; debian.family; debian.finance; debian.giving; debiangnulinux.org; debian.guide; debian.news; debian.plus; debianproject.community; debianproject.org; debian.team; debian.video
Julian Assange on Privacy of People, Even Little Children
Facebook/Google (or GAFAM, an acronym I coined with Assange) knows you better than your mom knows you
[Meme] Miscomprehension of GDPR
Social control in general is a ticking timebomb
In Haiti, the Market Share of Windows Collapsed (From 97% to 27% on Desktops/Laptops)
A couple of months ago Windows was measured at 3.04%
In Most Countries It's Still Possible Not to Have a 'Smartphone' and to Pay for Nearly Everything With Cash
Withdrawing money will be possible as long as enough people use many ATMs (cash machines)
Expect Lots of Material From Daniel Pocock as Election Day Nears
The experiences of Daniel Pocock were an excellent example of reprisal or retribution against either whistleblowers or people who give a voice to whistleblowers
I've Been Promoting Free Software for Over 25 Years
I wrote my first computer program when I was about 14, maybe a little younger (I have visual memory of it)
Reminder: Richard Stallman's Talk is This Week in Paris (and in French)
Defending rms isn't the same as defending everything he has ever said
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Saturday, May 11, 2024
IRC logs for Saturday, May 11, 2024
Online Bullying (Trying to Make People Unhappy)
Narcissists and bullies behind mice and keyboards, no honesty or fact-checking required
Talk About Software Freedom
"Linux" and "BSD" may mean a lot to more and more people, but they're still just brands or acronyms
Windows in South Korea: From 98.5% in 2010 to About 30% (Android Rises to Almost 50%)
Samsung ships like a million Linux devices per day
Improving Site Navigation for Easier Discovery and Catch-ups
This site is run by code we wrote ourselves
LibrePlanet 2024 Recordings
Let's hope independent recordings by viewers can help recovery of "lost talks" (recordings)
GNU/Linux Reaches 11% Market Share in the United States Of America - an All-Time High
The United States Of America is where the operating system started (Boston) and where Linus Torvalds works (Portland)
[Meme] Being Believed, Not Censored or Defamed
Daniel Pocock, Zini, and John Sullivan (FSF)
Links 11/05/2024: XBox Crisis, Spotify Exodus Continues
Links for the day
Gemini Links 11/05/2024: Why to Delete GitHub
Links for the day
In Europe, Bing Fell Every Month This Year, Lost a Considerable Share Since "Bing Chat" and All the Chatbot Hype
Microsoft's Bing has had many layoffs lately
Links 11/05/2024: Analysis of the Microsoft Crisis and Backdoor-Looking Bugs
Links for the day
Attacking the Messenger?
Stack Overflow and LLM licencing
Microsoft Fired Loads of Staff in Kenya, Which is Another Large Country Where GNU/Linux Has Grown a Lot
Microsoft pays Kenyans only 2 dollars an hour for an IT/office job
Knowing the True History of Debian, Owing to Irish Debian Developer Daniel Pocock (Currently Running to Become Member of the European Parliament)
Irish-Australian and scapegoat of a highly dysfunctional 'Debian family'
Attacking by Credentials
Modest people do not demand fancy titles
Microsoft Windows Used to Have 99% of the OS Market in Jordan, Now It's Just 13% (Less Than iOS)
Based on the data of statCounter, GNU/Linux in Jordan climbed from 0.62% in May 2014 to nearly 5% right now
More Nations Are Reaching and Exceeding 5% Market Share for GNU/Linux, Microsoft Wants to be Bailed Out Again
Microsoft is once again reaching out to Biden for a bailout - a subject we'll cover in a video some time this weekend
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Friday, May 10, 2024
IRC logs for Friday, May 10, 2024
[Meme] What Do You Call a Woman Who Does BDS on Free Software? Elana Hamasman.
Here are some confused thoughts
[Meme] Mission Aborted
Mission Aborted: cancel RMS
Taking Things Up a Notch
we strive/aim towards 15-25 new pages per day, i.e. around 500 per month or 6,000 per year