Plurple
Jump to navigation
Jump to search
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]"
- Space:
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
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>.
|
<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.