元素,17个字符加1个空格
_'[_ 2:n;0>[n~+]]`
这是我的第一门建构语言。它被设计为非常紧凑且易于阅读。所有指令均为一个字符长,并且执行一个功能。
Element具有两个堆栈和一个哈希作为内存结构。这两个堆栈称为主堆栈和控制堆栈。主堆栈是进行算术,I / O和哈希操作的地方。控制堆栈是逻辑操作发生的地方,该堆栈控制while和for循环。
Element背后的基本思想是,有一个存储数字/字符串的哈希,而堆栈则用于对这些数字执行计算。然后,可以将这些计算的结果分配给哈希表中的某个位置,以备将来使用。哈希的不同内容称为元素,因此它类似于数组,但可以具有非数字名称。
编辑:您可以在这里找到Element(用Perl编写)的解释器。
这是运算符的列表:在某些示例中,m和n表示堆栈中已经存在的数字。
text --pushes the string "text" onto the main stack
' --pops from main stack and pushes onto control stack
" --pops from control stack and pushes onto main stack
# --pops from main stack and destroys
[] --FOR statement (view the top number number from control stack and eval those many times)
{} --WHILE (loop until top number on control stack is 0)
( --pops from main stack, removes first character, pushes the remaining string onto stack, and pushes the removed character onto stack
) --pops from main stack, removes last character, pushes the remaining string onto stack, and pushes the removed character onto stack
~ --pops from main stack, pushes contents of the element with that name
+-*/%^ --pops two most recently named elements, adds/negates/multiplies/divides/modulates/exponentiates them, and places the result on the stack
mn; --pops m and n and assigns element n the value of m
mn@ --pops m and n and moves mth thing in stack to move to place n in stack
m$ --pops m and pushs size of m onto the stack
mn: --pops m and n and pushes m onto the stack n times
mn. --pops m and n and pushes m concatonated with n
m? --pops m and pushes 0 onto control stack if m is '0' or and empty string, else pushes 1
\ --escapes out of next character, so it isn't an operator and con be pushed onto the stack
><= --pops two numbers off of stack and tests, pushes 1 onto control stack if true and 0 if false
` --pops from main stack and prints
&| --pops two items from control stack, performs and/or respectively, and pushes result back onto control stack
! --pops a number off of control stack, pushes 1 if 0 or empty string, 0 otherwise
_ --inputs a word and pushes onto main stack
m, --pops m from main stack, coverts it to char and pushes, converts to num and pushes
Newlines and spaces separate different elements to be pushed onto the stack individually, but can pushed onto the stack using \
这是该程序工作方式的演练:
_'[ --take the first line of input, transfer it to the control stack, and start a for loop
_ 2: --take one more line of input, and duplicate it so that there are two copies
n; --take one copy and put into element n
0> --push a zero onto the stack, remove the zero and the other copy of the input, and compare. A 1 will be placed on the control stack if the input was greater than zero, a 0 otherwise.
[ --starts another for loop if the comparison was true. This loop will be repeated once if the comparison was true and no times if it was false, so it is the same as an IF statement.
n~ --pushes n onto the main stack, then pops it ans replaces it with the contents of n, which is the number stored earlier
+ --takes the number and adds it to the running total, which is contained as the last item on the stack
] --ends the inner for loop
] --ends the outer for loop
` --print the top item (also the only item) on the stack to output