💾 Archived View for gemini.ctrl-c.club › ~nttp › toys › ripen › overview.gmi captured on 2024-05-26 at 16:37:55. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-07-22)

-=-=-=-=-=-=-

Ripen language overview

At a basic level, Ripen works like most similar languages:

	? 3 2 + . cr
	5	 
	ok
	? :squared dup * ;
	ok
	? 3 2 + squared . cr
	25
	ok

Note the lack of a space after the colon: Ripen doesn't use parsing words, instead relying on sigils to achieve similar functionality. E.g. variables work like this:

	? 3 2 - =a
	ok
	? $a . cr
	1
	ok

On the minus side, there are no proper quoted strings; words in parentheses are simply joined by a space. Note that the closing paren is a word too, so it *must* be space-separated itself, on both sides:

	? ( Hello,  world! ) .. cr
	Hello, world!
	ok

Now, comments! Like in other Forths, a backslash introduces comments that last to the end of the line:

	2 3 2dup + -rot * < . cr \ Test if 2 + 3 < 2 * 3

On the other hand, block comments are C-style. They're also executable statements, so you'll want to leave them on the outside of word definitions:

	? /* s -- */ :say .. cr ;
	ok
	? ( Hello, world! ) say
	Hello, world!
	ok

Last but not least, control structures are inspired by Logo, to make them a lot more readable than in other stack-based languages:

	? 3 2 + 3 2 * < [ ( Yes! ) .. cr ] iftrue
	Yes!
	ok
	? { $i . } 3 times cr
	0 1 2 
	ok

You can use either square brackets or else curly braces to delimit lists of words, that control structures treat as blocks of code. The reason both are provided is that lists of the same kind can't nest.

When defining a word, beware that it will overwrite an older definition by the same name if it exists, and the entire script will see the new one right away.

Otherwise, Ripen only provides a minimum of vocabulary:

and a few more conveniences. Enter `words` for a complete list.

Ripen home page