STACK

Constant STACK 

Source
pub const STACK: &str = "// stdlib/stack.aether\n// Aether \u{6808}\u{ff08}Stack\u{ff09}\u{6570}\u{636e}\u{7ed3}\u{6784}\u{5e93}\n// \u{5b9e}\u{73b0}\u{540e}\u{8fdb}\u{5148}\u{51fa}\u{ff08}LIFO\u{ff09}\u{6808}\u{ff0c}\u{4f7f}\u{7528}\u{6570}\u{7ec4}\u{5b9e}\u{73b0}\n\n// ==================== \u{521b}\u{5efa}\u{6808} ====================\n\n// \u{521b}\u{5efa}\u{4e00}\u{4e2a}\u{7a7a}\u{6808}\nFunc STACK_NEW() {\n    Return []\n}\n\n// \u{4ece}\u{6570}\u{7ec4}\u{521b}\u{5efa}\u{6808}\nFunc STACK_FROM_ARRAY(ARR) {\n    Return ARR\n}\n\n// ==================== \u{57fa}\u{672c}\u{64cd}\u{4f5c} ====================\n\n// \u{538b}\u{6808}\u{ff1a}\u{5728}\u{6808}\u{9876}\u{6dfb}\u{52a0}\u{5143}\u{7d20}\n// \u{8fd4}\u{56de}\u{65b0}\u{7684}\u{6808}\nFunc STACK_PUSH(STACK, ITEM) {\n    Return PUSH(STACK, ITEM)\n}\n\n// \u{51fa}\u{6808}\u{ff1a}\u{79fb}\u{9664}\u{5e76}\u{8fd4}\u{56de}\u{6808}\u{9876}\u{5143}\u{7d20}\n// \u{8fd4}\u{56de}\u{4e00}\u{4e2a}\u{5b57}\u{5178}\u{ff1a}{\"stack\": \u{65b0}\u{6808}, \"value\": \u{51fa}\u{6808}\u{7684}\u{503c}}\n// \u{5982}\u{679c}\u{6808}\u{4e3a}\u{7a7a}\u{ff0c}\u{8fd4}\u{56de} {\"stack\": [], \"value\": Null}\nFunc STACK_POP(STACK) {\n    If (STACK_IS_EMPTY(STACK)) {\n        Return {\"stack\": [], \"value\": Null}\n    }\n    \n    Set LEN_ LEN(STACK)\n    Set LAST STACK[LEN_ - 1]\n    Set NEW_STACK []\n    Set I 0\n    \n    While (I < (LEN_ - 1)) {\n        Set NEW_STACK PUSH(NEW_STACK, STACK[I])\n        Set I (I + 1)\n    }\n    \n    Return {\"stack\": NEW_STACK, \"value\": LAST}\n}\n\n// \u{67e5}\u{770b}\u{6808}\u{9876}\u{5143}\u{7d20}\u{ff08}\u{4e0d}\u{79fb}\u{9664}\u{ff09}\nFunc STACK_PEEK(STACK) {\n    If (STACK_IS_EMPTY(STACK)) {\n        Return Null\n    }\n    Set LEN_ LEN(STACK)\n    Return STACK[LEN_ - 1]\n}\n\n// \u{67e5}\u{770b}\u{6808}\u{5e95}\u{5143}\u{7d20}\nFunc STACK_PEEK_BOTTOM(STACK) {\n    If (STACK_IS_EMPTY(STACK)) {\n        Return Null\n    }\n    Return STACK[0]\n}\n\n// \u{83b7}\u{53d6}\u{6808}\u{7684}\u{5927}\u{5c0f}\nFunc STACK_SIZE(STACK) {\n    Return LEN(STACK)\n}\n\n// \u{68c0}\u{67e5}\u{6808}\u{662f}\u{5426}\u{4e3a}\u{7a7a}\nFunc STACK_IS_EMPTY(STACK) {\n    Return LEN(STACK) == 0\n}\n\n// \u{6e05}\u{7a7a}\u{6808}\nFunc STACK_CLEAR() {\n    Return []\n}\n\n// ==================== \u{9ad8}\u{7ea7}\u{64cd}\u{4f5c} ====================\n\n// \u{68c0}\u{67e5}\u{6808}\u{662f}\u{5426}\u{5305}\u{542b}\u{5143}\u{7d20}\nFunc STACK_CONTAINS(STACK, ITEM) {\n    Set LEN_ LEN(STACK)\n    Set I 0\n    \n    While (I < LEN_) {\n        If (STACK[I] == ITEM) {\n            Return True\n        }\n        Set I (I + 1)\n    }\n    \n    Return False\n}\n\n// \u{83b7}\u{53d6}\u{5143}\u{7d20}\u{5728}\u{6808}\u{4e2d}\u{7684}\u{4f4d}\u{7f6e}\u{ff08}\u{4ece}\u{6808}\u{5e95}\u{5f00}\u{59cb}\u{ff0c}0\u{5f00}\u{59cb}\u{ff09}\u{ff0c}\u{5982}\u{679c}\u{4e0d}\u{5b58}\u{5728}\u{8fd4}\u{56de} -1\nFunc STACK_INDEX_OF(STACK, ITEM) {\n    Set LEN_ LEN(STACK)\n    Set I 0\n    \n    While (I < LEN_) {\n        If (STACK[I] == ITEM) {\n            Return I\n        }\n        Set I (I + 1)\n    }\n    \n    Return -1\n}\n\n// \u{83b7}\u{53d6}\u{6808}\u{9876}\u{7684}\u{7b2c}N\u{4e2a}\u{5143}\u{7d20}\u{ff08}0\u{662f}\u{6808}\u{9876}\u{ff0c}1\u{662f}\u{6b21}\u{9876}\u{ff0c}\u{4ee5}\u{6b64}\u{7c7b}\u{63a8}\u{ff09}\nFunc STACK_PEEK_N(STACK, N) {\n    Set LEN_ LEN(STACK)\n    If (N < 0 || N >= LEN_) {\n        Return Null\n    }\n    Return STACK[LEN_ - 1 - N]\n}\n\n// \u{5c06}\u{6808}\u{8f6c}\u{6362}\u{4e3a}\u{6570}\u{7ec4}\u{ff08}\u{6808}\u{5e95}\u{5728}\u{524d}\u{ff0c}\u{6808}\u{9876}\u{5728}\u{540e}\u{ff09}\nFunc STACK_TO_ARRAY(STACK) {\n    Return STACK\n}\n\n// \u{53cd}\u{8f6c}\u{6808}\nFunc STACK_REVERSE(STACK) {\n    Set RESULT []\n    Set LEN_ LEN(STACK)\n    Set I (LEN_ - 1)\n    \n    While (I >= 0) {\n        Set RESULT PUSH(RESULT, STACK[I])\n        Set I (I - 1)\n    }\n    \n    Return RESULT\n}\n\n// ==================== \u{6279}\u{91cf}\u{64cd}\u{4f5c} ====================\n\n// \u{6279}\u{91cf}\u{538b}\u{6808}\u{ff1a}\u{5c06}\u{6570}\u{7ec4}\u{4e2d}\u{7684}\u{6240}\u{6709}\u{5143}\u{7d20}\u{538b}\u{5165}\u{6808}\nFunc STACK_PUSH_ALL(STACK, ARR) {\n    Set RESULT STACK\n    Set LEN_ LEN(ARR)\n    Set I 0\n    \n    While (I < LEN_) {\n        Set RESULT PUSH(RESULT, ARR[I])\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// \u{6279}\u{91cf}\u{51fa}\u{6808}\u{ff1a}\u{79fb}\u{9664}\u{5e76}\u{8fd4}\u{56de}\u{6307}\u{5b9a}\u{6570}\u{91cf}\u{7684}\u{5143}\u{7d20}\n// \u{8fd4}\u{56de}\u{4e00}\u{4e2a}\u{5b57}\u{5178}\u{ff1a}{\"stack\": \u{65b0}\u{6808}, \"values\": \u{51fa}\u{6808}\u{7684}\u{5143}\u{7d20}\u{6570}\u{7ec4}\u{ff08}\u{6700}\u{540e}\u{51fa}\u{6808}\u{7684}\u{5728}\u{524d}\u{ff09}}\nFunc STACK_POP_N(STACK, N) {\n    If (N <= 0) {\n        Return {\"stack\": STACK, \"values\": []}\n    }\n    \n    Set MAX_N N\n    Set LEN_ LEN(STACK)\n    If (N > LEN_) {\n        Set MAX_N LEN_\n    }\n    \n    Set VALUES []\n    Set I 0\n    \n    While (I < MAX_N) {\n        Set VALUES PUSH(VALUES, STACK[LEN_ - 1 - I])\n        Set I (I + 1)\n    }\n    \n    Set NEW_STACK []\n    Set J 0\n    \n    While (J < (LEN_ - MAX_N)) {\n        Set NEW_STACK PUSH(NEW_STACK, STACK[J])\n        Set J (J + 1)\n    }\n    \n    Return {\"stack\": NEW_STACK, \"values\": VALUES}\n}\n\n// ==================== \u{5b9e}\u{7528}\u{51fd}\u{6570} ====================\n\n// \u{904d}\u{5386}\u{6808}\u{ff0c}\u{5bf9}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{5e94}\u{7528}\u{51fd}\u{6570}\u{ff08}\u{4ece}\u{6808}\u{5e95}\u{5230}\u{6808}\u{9876}\u{ff09}\n// FUNC \u{5e94}\u{8be5}\u{63a5}\u{53d7}\u{4e24}\u{4e2a}\u{53c2}\u{6570}\u{ff08}\u{7d22}\u{5f15}\u{ff0c}\u{5143}\u{7d20}\u{ff09}\nFunc STACK_FOREACH(STACK, FUNC) {\n    Set LEN_ LEN(STACK)\n    Set I 0\n    \n    While (I < LEN_) {\n        FUNC(I, STACK[I])\n        Set I (I + 1)\n    }\n}\n\n// \u{4ece}\u{6808}\u{9876}\u{904d}\u{5386}\u{6808}\u{ff0c}\u{5bf9}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{5e94}\u{7528}\u{51fd}\u{6570}\n// FUNC \u{5e94}\u{8be5}\u{63a5}\u{53d7}\u{4e24}\u{4e2a}\u{53c2}\u{6570}\u{ff08}\u{6df1}\u{5ea6}\u{ff0c}\u{5143}\u{7d20}\u{ff09}\nFunc STACK_FOREACH_FROM_TOP(STACK, FUNC) {\n    Set LEN_ LEN(STACK)\n    Set I (LEN_ - 1)\n    Set DEPTH 0\n    \n    While (I >= 0) {\n        FUNC(DEPTH, STACK[I])\n        Set I (I - 1)\n        Set DEPTH (DEPTH + 1)\n    }\n}\n\n// \u{8fc7}\u{6ee4}\u{6808}\u{ff0c}\u{8fd4}\u{56de}\u{6ee1}\u{8db3}\u{6761}\u{4ef6}\u{7684}\u{5143}\u{7d20}\u{7ec4}\u{6210}\u{7684}\u{65b0}\u{6808}\n// PREDICATE \u{5e94}\u{8be5}\u{63a5}\u{53d7}\u{4e00}\u{4e2a}\u{53c2}\u{6570}\u{5e76}\u{8fd4}\u{56de} True/False\nFunc STACK_FILTER(STACK, PREDICATE) {\n    Set RESULT []\n    Set LEN_ LEN(STACK)\n    Set I 0\n    \n    While (I < LEN_) {\n        Set ITEM STACK[I]\n        If (PREDICATE(ITEM)) {\n            Set RESULT PUSH(RESULT, ITEM)\n        }\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// \u{6620}\u{5c04}\u{6808}\u{ff0c}\u{5bf9}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{5e94}\u{7528}\u{51fd}\u{6570}\u{ff0c}\u{8fd4}\u{56de}\u{65b0}\u{6808}\n// MAPPER \u{5e94}\u{8be5}\u{63a5}\u{53d7}\u{4e00}\u{4e2a}\u{53c2}\u{6570}\u{5e76}\u{8fd4}\u{56de}\u{8f6c}\u{6362}\u{540e}\u{7684}\u{503c}\nFunc STACK_MAP(STACK, MAPPER) {\n    Set RESULT []\n    Set LEN_ LEN(STACK)\n    Set I 0\n    \n    While (I < LEN_) {\n        Set RESULT PUSH(RESULT, MAPPER(STACK[I]))\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// \u{5c06}\u{6808}\u{8f6c}\u{6362}\u{4e3a}\u{5b57}\u{7b26}\u{4e32}\u{8868}\u{793a}\nFunc STACK_TO_STRING(STACK) {\n    If (STACK_IS_EMPTY(STACK)) {\n        Return \"Stack[]\"\n    }\n    \n    Set RESULT \"Stack[\"\n    Set LEN_ LEN(STACK)\n    Set I 0\n    \n    While (I < LEN_) {\n        Set RESULT (RESULT + TO_STRING(STACK[I]))\n        If (I < (LEN_ - 1)) {\n            Set RESULT (RESULT + \", \")\n        }\n        Set I (I + 1)\n    }\n    \n    Set RESULT (RESULT + \"] <-TOP\")\n    Return RESULT\n}\n\n// \u{590d}\u{5236}\u{6808}\nFunc STACK_CLONE(STACK) {\n    Set RESULT []\n    Set LEN_ LEN(STACK)\n    Set I 0\n    \n    While (I < LEN_) {\n        Set RESULT PUSH(RESULT, STACK[I])\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// \u{4ea4}\u{6362}\u{6808}\u{9876}\u{7684}\u{4e24}\u{4e2a}\u{5143}\u{7d20}\n// \u{8fd4}\u{56de}\u{65b0}\u{7684}\u{6808}\u{ff0c}\u{5982}\u{679c}\u{5143}\u{7d20}\u{5c11}\u{4e8e}2\u{4e2a}\u{5219}\u{8fd4}\u{56de}\u{539f}\u{6808}\nFunc STACK_SWAP_TOP(STACK) {\n    Set LEN_ LEN(STACK)\n    If (LEN_ < 2) {\n        Return STACK\n    }\n    \n    Set NEW_STACK []\n    Set I 0\n    \n    While (I < (LEN_ - 2)) {\n        Set NEW_STACK PUSH(NEW_STACK, STACK[I])\n        Set I (I + 1)\n    }\n    \n    Set NEW_STACK PUSH(NEW_STACK, STACK[LEN_ - 1])\n    Set NEW_STACK PUSH(NEW_STACK, STACK[LEN_ - 2])\n    \n    Return NEW_STACK\n}\n\n// \u{65cb}\u{8f6c}\u{6808}\u{ff1a}\u{5c06}\u{6808}\u{9876}\u{5143}\u{7d20}\u{79fb}\u{5230}\u{6808}\u{5e95}\nFunc STACK_ROTATE_DOWN(STACK) {\n    If (STACK_IS_EMPTY(STACK)) {\n        Return STACK\n    }\n    \n    Set LEN_ LEN(STACK)\n    Set TOP STACK[LEN_ - 1]\n    Set RESULT [TOP]\n    Set I 0\n    \n    While (I < (LEN_ - 1)) {\n        Set RESULT PUSH(RESULT, STACK[I])\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// \u{65cb}\u{8f6c}\u{6808}\u{ff1a}\u{5c06}\u{6808}\u{5e95}\u{5143}\u{7d20}\u{79fb}\u{5230}\u{6808}\u{9876}\nFunc STACK_ROTATE_UP(STACK) {\n    If (STACK_IS_EMPTY(STACK)) {\n        Return STACK\n    }\n    \n    Set LEN_ LEN(STACK)\n    Set BOTTOM STACK[0]\n    Set RESULT []\n    Set I 1\n    \n    While (I < LEN_) {\n        Set RESULT PUSH(RESULT, STACK[I])\n        Set I (I + 1)\n    }\n    \n    Set RESULT PUSH(RESULT, BOTTOM)\n    Return RESULT\n}\n";
Expand description

栈(Stack)数据结构