What to Call Lone Tilde (~)

So this little guy doesn't have a name:

Yes it's a "tilde", but if there's a TILDE definition I think it should be talking about the character:

>> char? tilde
== ~okay~  ; anti

>> quasiform? tilde
== ~null~  ; anti

We're talking about something that evaluates to the antiform of blank (a VOID):

>> eval [~]
== \~\  ; antiform (void!)

QUASI-BLANK?

It's an accurate name...

>> quasi first [,]
== ~

But if you're going to be testing for them easily in a block, you want something shorter.

Carl went on a bit of a bizarre track by deciding that #[none] was unweildy in blocks, and he liked zeros better... single characters... so he started using zeros instead of nones, and made ZERO? accept everything.

I started using a lot more zeros in my data structures, especially those that had to be loaded from a file or database, because I knew that zero loaded more efficiently than NONE (no hash was required).

For example, where I would once create REBOL-stored DB records like this:

["name" none none]

I would use:

["name" 0 0]

Because using 0 does not require a hash-and-compare operation (as does the word NONE) nor does it require binding (as does the value NONE)... nor is it the long-form literal #[none], that seems just a bit too cumbersome to my coding style.

You're getting a lot of single-character choices in Ren-C, and which one you use kind of depends on what you want.

QUASI-BLANK is as ornery as it can be while being legal to appear in a block.

Does It Need A Name?

Something that makes it desirable for QUASI-BLANK to have a name is that because it's evaluative, you can't just compare to it directly without quoting it.

if '~ = second block [...]

Something SPACE doesn't have that problem.

if _ = second block [...]

But still, Rebol tries to reduce the symboly-ness, and that looks nicer if there's a test you're going to be performing a lot:

if space? second block [...]

So I think that QUASI-BLANK needs a nice short name, to help avoid people writing sequences like '~ = often in their code.

Why? It makes perfect sense to me to define TILDE as ~ and let the character be denoted as "~" (or whatever the syntax is, I forget).

Conceptually, it's better to give it a name for what it represents, vs. what it "looks like".

Tilde is too literal in my book, and if that were to be anything it should be a character literal:

>> tilde = second "a~b"
== ~okay~  ; anti

Rebol2 called (...) a PAREN! and I disliked that as much as I would have disliked [...] being called BRACK! So I changed it to GROUP!.

1 Like

So I'm going with the fanciful QUASAR? for now:

>> quasar? first [~]
== ~okay~  ; anti

It's not as inherently meaningful as QUASI-BLANK?... but if you're going to write that out, I'd definitely prefer you say '~ =

QUASAR is certainly memorable, and it is short.

In only about a month's time, I've actually grown rather fond of calling these "quasars".

It felt jarring at first--but I've definitely warmed up to it--and I think other people will too.

It joins the names "PIN" and "TIE" and "LIFT".

[_ @ $ ^ ~]

"That's a block with a space, pin, tie, lift, and quasar in it."

One Might Argue The Pattern Would be "QUASI"

>> pin _
== @  ; <-- look, it's a "pin"

>> quasi _
== ~   ; <-- look, it's a "quasi"

The problem here though, is that PINNED? and LIFTED? and TIED? are good words, but QUASID? and QUASIFIED? aren't so great.

So QUASIFORM? was preferred over QUASIFIED?... and then QUASI? became the shorthand for QUASIFORM?

>> quoted? first ['a]
== ~okay~  ; anti

>> quasi? first [~a~]
== ~okay~  ; anti

We'd have to let go of the shorthand of QUASI? for QUASIFORM? if we wanted true uniformity to complete the pattern and call ~ a "quasi"

>> quasi? first [~]
== ~okay~  ; anti

>> quasi? first [~a~]
== ~null~  ; anti

>> quasiform? first [~]
== ~okay~  ; anti

>> quasiform? first [~a~]
== ~okay~  ; anti

But I Like QUASAR And The Existing QUASI? Better

"~ is a quasi" doesn't sound right, quasi sounds like a modifier.

"~ is a quasar" has come to settle with me... like I said... and I think it's better, and lets us keep QUASI? as the question to test for a quasiform.

1 Like

I still prefer ‘tilde’. And, for that matter, ‘underscore’, ‘at’, ‘dollar’ and ‘caret’. Much simpler that way!

To be honest, the current state of affairs reminds me most strongly of INTERCAL: ‘A unary operator is applied to a sparked or rabbit-eared expression by inserting the operator immediately following the opening spark or ears …’

Those don't have verb forms. You might think you're simplifying things by doing this, but you wind up with "dollarize" and "caretify" and such.

But even more fundamentally: the characters don't go away. You still have to talk about underscores and dollars and such as literals, or in strings...

>> second "a@b"
== #@  ; an AT, not a PIN

>> second [a @ b]
== @  ; a PIN, not an AT

>> @
** Error: @ is missing its argument to take literally

>> @ foo
== foo

>> #@
== #@

The evaluator behavior of "at" is to evaluate to an "at". A "pin" does something different when it stands alone than when attached to something, but I still call it a pin.

[_ #_ @ #@ $ #$ ^ #^ ~ #~]

"A BLOCK! with a Space, an underscore, a Pin, an "at", a Tie, a dollar, a Lift, a caret, a Quasar, and a tilde in it.

What's particularly clever here now is that what would be (#" ") renders as _ so it really is a SPACE, not an underscore or a "blank".

>> second "a b"
== _

Calling that an underscore is clearly wrong. Once you understand why that's clearly wrong, you should understand why calling the rest by their visual representations is wrong too.

I'm suggesting _ be a "space rune" if one needs to speak precisely. Though context should usually be sufficient to not need to differentiate from the space character as applicable writ large.

Honestly...

To be honest, it's times like these that my avatar's glare is quite deserved.

This is world-class work, and shouldn't be equated to nonsense.