Plurple

From Esolang
Jump to navigation Jump to search
Plurple
Paradigm(s) Object based
Designed by User:Laclale
Appeared in 2022
Computational class Maybe Turing complete
Major implementations Currently Unimplemented
File extension(s) .ppl, but any textual can be
This article is not detailed enough and needs to be expanded. Please help us by adding some more information.

Plurple is an esoteric programming language by User:Laclale.

Why Plurple?

"Programming Language Using Role-Playing Syntax", with "le".

Syntax

Sigil and Space

Plurple has Spaceless Syntax and Sigilless Syntax. Shows both in commands, but you can replace ":-;." to space, or add space to near of that sigil.

  • ":" is start sigil. "-" is connect sigil. "." ";" is end sigil. Metatext for these exists.
    • ":""[Start]"
    • "-""[Minus]"
    • ".""[Dot]"
    • ";""[End]"
  • Due to this, only 4 type of spaces will be kept in quote. However, metatext exists also.
    • Space:" ""[Space]"
    • Horizonital tab:"\t""[hTab]"
    • Vertical tab:"\v""[vTab]"
    • New line:"\n""[LF]"

Calculatives

If you use these on the right side of <stat> or position of group, you can't get created value. Instead, it calculates. ([] aka metatext also works.)

Calculative E.g.
+ 5 + 2 ⇒ 7
-([Minus]) 5 - 2 ⇒ 3
* 5 * 2 ⇒ 10
/ 5 / 2 ⇒ 2
% 5 % 2 ⇒ 1
^ 5 ^ 2 ⇒ 25
= a == b
~ a ~= b
>([Less]) a > b
<([More]) a <= b
not not a
or a or b
and a and b

Also, some depend on implements.

@ prefix

Use prefix @ to any group, to make foreach control of an array.

<group>[<number>]

This leads to the inside of the group(array). Many right side stat can have multiple [<number>]s, while the left side can't.

Commands

Some commands doesn't have actual Sigilless. <> is arguments.
Spaceless Sigilless Description
ooc:▪▪▪ ooc ▪▪▪ Comment. Nothing does until first End sigil even if sigilless. Be careful with using any count of " in there.
d-<number> d<number> Returns random number, only sets highest value and lowest value is always 1. You can't use variable to there.
<numberA>-d-<numberB> <number>d<number> Returns sum of <numberA> times called d<numberB>. You can't use variable to there also.
<stat>:up-<number> <stat> up <number> Increment. Variable allowed.
<stat>:up! <stat> up! 1 increment. You can replace "!" to end sigil.
<stat>:down-<number> <stat> down <number> Decrement. Variable allowed.
<stat>:down! <stat> down! 1 decrement. You can replace "!" to end sigil.
create:<menuA>-<menuB>-<stat> create <menuA> <menuB> <stat> Make new <menuA> <menuB> named <stat>.
  • <menuA>
    • melee(Local)
    • ranged(Global)
  • <menuB>:
    • number(Integer)
    • quote(String)
    • group(Array)
    • skill(Function)
    • class(Class) will be supported.
<stat>:is-number <stat> is number Changes stat's type to number(Integer). stat can be <group>[<number>].
<stat>:is-quote <stat> is quote Changes stat's type to quote(String). stat can be <group>[<number>].
<stat>:is-melee <stat> is melee Changes stat's type to melee(Local).
<stat>:is-ranged <stat> is ranged Changes stat's type to ranged(Global).
<statA>:is-<statB> <statA> is <statB> Changes statA's value to statB's value. statA can be <group>[<number>]. For statB, {,} can be used for group(Array), ◆◆ can be used for skill(Function), but can't nest functions at once.
grind:<stat> grind <stat> Next in loop. If true, continues. Foreach loop's target is changed in this command.
attack:<stat> attack <stat> If. This along with hit and miss will be set.
hit: hit Set with attack, and if that was True then run this block.
miss: miss Set with attack, and if that was False then run this block.
done! done! End block for hit, miss, menu, and fight. You can replace "!" to end sigil.
menu:<stat> menu <stat> Switch. This along with option will be set.
option:<stat> option <stat> Set with menu, and if menu's stat equal to this then run this block.
fight:<stat>-<number> fight <stat> <number> For loop. Creates initial melee stat and requires grind.
fight:@<group> fight @<group> Foreach loop. Use target to control current one. Also requires grind.
<group>[<number>]:join-<stat> <group>[<number>] join <stat> Add stat to group, you can omit [] if adding to last.
<group>[<number>]:leave! <group>[<number>] leave! Delete stat from group, you can omit [] if removing from last. You can replace "!" to end sigil.
use:<skill>-<group> use <skill> <group> Call function named <skill>, with sending <group> as targets(argument).
result:<stat> result <stat> Return <stat> as used skill's result.
say:<stat> say <stat> Output. Spaceless command like d<number> will be executed if said at once. Metatext can be used for output of sigil.

Examples

Looping counter

ooc:My lua implementation doesn't allow this due to in Fandom.
fight:first-1.
 fight:second-first.
  grind:second>0.
  say "*".
  second:down.
 done.
 say "[LF]".
 first up.
done.

XKCD fish

ooc:Used targets as input.
create ranged number acc.
fight:@targets.
 attack (acc<0 or acc==256);
 hit:
  acc is 0.
 done.
 menu target.
 option:"x".
  acc up.
 option:"d".
  acc down.
 option:"k".
  acc is (acc ^ 2).
 option:"c".
  say acc.
 done.
 grind yes.
 ooc:this is valid.
done.

If anybody comes up with any example programs, feel free to add them here.

Implementations

You can make your implement.