FUNCTIONAL

Constant FUNCTIONAL 

Source
pub const FUNCTIONAL: &str = "// \u{51fd}\u{6570}\u{5f0f}\u{7f16}\u{7a0b}\u{5de5}\u{5177}\u{5e93}\n// Functional Programming Utilities\n// \u{63d0}\u{4f9b}\u{51fd}\u{6570}\u{7ec4}\u{5408}\u{3001}\u{9ad8}\u{9636}\u{51fd}\u{6570}\u{7b49}\u{51fd}\u{6570}\u{5f0f}\u{7f16}\u{7a0b}\u{5de5}\u{5177}\n\n// ============================================================\n// \u{6570}\u{7ec4}\u{9ad8}\u{9636}\u{51fd}\u{6570}\u{589e}\u{5f3a}\n// ============================================================\n\n// MAP_WITH_INDEX - \u{5e26}\u{7d22}\u{5f15}\u{7684}\u{6620}\u{5c04}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   FUNC - \u{6620}\u{5c04}\u{51fd}\u{6570}\u{ff08}\u{63a5}\u{53d7}\u{5143}\u{7d20}\u{548c}\u{7d22}\u{5f15}\u{4e24}\u{4e2a}\u{53c2}\u{6570}\u{ff09}\n// \u{8fd4}\u{56de}: \u{6620}\u{5c04}\u{540e}\u{7684}\u{65b0}\u{6570}\u{7ec4}\nFunc MAP_WITH_INDEX(ARR, FUNC) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        Set MAPPED FUNC(ITEM, I)\n        Set RESULT PUSH(RESULT, MAPPED)\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// FILTER_WITH_INDEX - \u{5e26}\u{7d22}\u{5f15}\u{7684}\u{8fc7}\u{6ee4}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\u{ff08}\u{63a5}\u{53d7}\u{5143}\u{7d20}\u{548c}\u{7d22}\u{5f15}\u{4e24}\u{4e2a}\u{53c2}\u{6570}\u{ff09}\n// \u{8fd4}\u{56de}: \u{8fc7}\u{6ee4}\u{540e}\u{7684}\u{65b0}\u{6570}\u{7ec4}\nFunc FILTER_WITH_INDEX(ARR, PREDICATE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (PREDICATE(ITEM, I)) {\n            Set RESULT PUSH(RESULT, ITEM)\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// FOREACH - \u{904d}\u{5386}\u{6570}\u{7ec4}\u{6267}\u{884c}\u{51fd}\u{6570}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   FUNC - \u{5bf9}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{6267}\u{884c}\u{7684}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: Null\nFunc FOREACH(ARR, FUNC) {\n    If (TYPE(ARR) != \"Array\") {\n        Return Null\n    }\n    \n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        FUNC(ITEM)\n        Set I (I + 1)\n    }\n    \n    Return Null\n}\n\n// FIND - \u{67e5}\u{627e}\u{7b2c}\u{4e00}\u{4e2a}\u{6ee1}\u{8db3}\u{6761}\u{4ef6}\u{7684}\u{5143}\u{7d20}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: \u{7b2c}\u{4e00}\u{4e2a}\u{5339}\u{914d}\u{7684}\u{5143}\u{7d20}\u{ff0c}\u{5982}\u{679c}\u{6ca1}\u{6709}\u{627e}\u{5230}\u{8fd4}\u{56de} Null\nFunc FIND(ARR, PREDICATE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return Null\n    }\n    \n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (PREDICATE(ITEM)) {\n            Return ITEM\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return Null\n}\n\n// FIND_INDEX - \u{67e5}\u{627e}\u{7b2c}\u{4e00}\u{4e2a}\u{6ee1}\u{8db3}\u{6761}\u{4ef6}\u{7684}\u{5143}\u{7d20}\u{7684}\u{7d22}\u{5f15}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: \u{7d22}\u{5f15}\u{ff0c}\u{5982}\u{679c}\u{6ca1}\u{6709}\u{627e}\u{5230}\u{8fd4}\u{56de} -1\nFunc FIND_INDEX(ARR, PREDICATE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return -1\n    }\n    \n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (PREDICATE(ITEM)) {\n            Return I\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return -1\n}\n\n// EVERY - \u{68c0}\u{67e5}\u{662f}\u{5426}\u{6240}\u{6709}\u{5143}\u{7d20}\u{90fd}\u{6ee1}\u{8db3}\u{6761}\u{4ef6}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: True \u{6216} False\nFunc EVERY(ARR, PREDICATE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return False\n    }\n    \n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (!PREDICATE(ITEM)) {\n            Return False\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return True\n}\n\n// SOME - \u{68c0}\u{67e5}\u{662f}\u{5426}\u{81f3}\u{5c11}\u{6709}\u{4e00}\u{4e2a}\u{5143}\u{7d20}\u{6ee1}\u{8db3}\u{6761}\u{4ef6}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: True \u{6216} False\nFunc SOME(ARR, PREDICATE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return False\n    }\n    \n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (PREDICATE(ITEM)) {\n            Return True\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return False\n}\n\n// PARTITION - \u{6839}\u{636e}\u{6761}\u{4ef6}\u{5c06}\u{6570}\u{7ec4}\u{5206}\u{6210}\u{4e24}\u{90e8}\u{5206}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: \u{5b57}\u{5178} {\"true\": \u{6ee1}\u{8db3}\u{6761}\u{4ef6}\u{7684}\u{5143}\u{7d20}\u{6570}\u{7ec4}, \"false\": \u{4e0d}\u{6ee1}\u{8db3}\u{6761}\u{4ef6}\u{7684}\u{5143}\u{7d20}\u{6570}\u{7ec4}}\nFunc PARTITION(ARR, PREDICATE) {\n    If (TYPE(ARR) != \"Array\") {\n        Return {\"true\": [], \"false\": []}\n    }\n    \n    Set TRUE_ARR []\n    Set FALSE_ARR []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (PREDICATE(ITEM)) {\n            Set TRUE_ARR PUSH(TRUE_ARR, ITEM)\n        } Else {\n            Set FALSE_ARR PUSH(FALSE_ARR, ITEM)\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return {\"true\": TRUE_ARR, \"false\": FALSE_ARR}\n}\n\n// ============================================================\n// \u{5b57}\u{5178}\u{9ad8}\u{9636}\u{51fd}\u{6570}\n// ============================================================\n\n// MAP_DICT - \u{6620}\u{5c04}\u{5b57}\u{5178}\u{7684}\u{503c}\n// \u{53c2}\u{6570}:\n//   DICT - \u{5b57}\u{5178}\n//   FUNC - \u{6620}\u{5c04}\u{51fd}\u{6570}\u{ff08}\u{63a5}\u{53d7}\u{503c}\u{548c}\u{952e}\u{4e24}\u{4e2a}\u{53c2}\u{6570}\u{ff09}\n// \u{8fd4}\u{56de}: \u{65b0}\u{5b57}\u{5178}\nFunc MAP_DICT(DICT, FUNC) {\n    If (TYPE(DICT) != \"Dict\") {\n        Return {}\n    }\n    \n    Set RESULT {}\n    Set DICT_KEYS KEYS(DICT)\n    Set I 0\n    Set LEN_KEYS LEN(DICT_KEYS)\n    \n    While (I < LEN_KEYS) {\n        Set KEY DICT_KEYS[I]\n        Set VALUE DICT[KEY]\n        Set NEW_VALUE FUNC(VALUE, KEY)\n        Set RESULT[KEY] NEW_VALUE\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// FILTER_DICT - \u{8fc7}\u{6ee4}\u{5b57}\u{5178}\n// \u{53c2}\u{6570}:\n//   DICT - \u{5b57}\u{5178}\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\u{ff08}\u{63a5}\u{53d7}\u{503c}\u{548c}\u{952e}\u{4e24}\u{4e2a}\u{53c2}\u{6570}\u{ff09}\n// \u{8fd4}\u{56de}: \u{8fc7}\u{6ee4}\u{540e}\u{7684}\u{65b0}\u{5b57}\u{5178}\nFunc FILTER_DICT(DICT, PREDICATE) {\n    If (TYPE(DICT) != \"Dict\") {\n        Return {}\n    }\n    \n    Set RESULT {}\n    Set DICT_KEYS KEYS(DICT)\n    Set I 0\n    Set LEN_KEYS LEN(DICT_KEYS)\n    \n    While (I < LEN_KEYS) {\n        Set KEY DICT_KEYS[I]\n        Set VALUE DICT[KEY]\n        \n        If (PREDICATE(VALUE, KEY)) {\n            Set RESULT[KEY] VALUE\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// FOREACH_DICT - \u{904d}\u{5386}\u{5b57}\u{5178}\u{6267}\u{884c}\u{51fd}\u{6570}\n// \u{53c2}\u{6570}:\n//   DICT - \u{5b57}\u{5178}\n//   FUNC - \u{5bf9}\u{6bcf}\u{4e2a}\u{952e}\u{503c}\u{5bf9}\u{6267}\u{884c}\u{7684}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: Null\nFunc FOREACH_DICT(DICT, FUNC) {\n    If (TYPE(DICT) != \"Dict\") {\n        Return Null\n    }\n    \n    Set DICT_KEYS KEYS(DICT)\n    Set I 0\n    Set LEN_KEYS LEN(DICT_KEYS)\n    \n    While (I < LEN_KEYS) {\n        Set KEY DICT_KEYS[I]\n        Set VALUE DICT[KEY]\n        FUNC(KEY, VALUE)\n        Set I (I + 1)\n    }\n    \n    Return Null\n}\n\n// DICT_TO_ARRAY - \u{5c06}\u{5b57}\u{5178}\u{8f6c}\u{6362}\u{4e3a}\u{952e}\u{503c}\u{5bf9}\u{6570}\u{7ec4}\n// \u{53c2}\u{6570}:\n//   DICT - \u{5b57}\u{5178}\n// \u{8fd4}\u{56de}: \u{6570}\u{7ec4}\u{ff0c}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{4e3a} {\"key\": K, \"value\": V}\nFunc DICT_TO_ARRAY(DICT) {\n    If (TYPE(DICT) != \"Dict\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set DICT_KEYS KEYS(DICT)\n    Set I 0\n    Set LEN_KEYS LEN(DICT_KEYS)\n    \n    While (I < LEN_KEYS) {\n        Set KEY DICT_KEYS[I]\n        Set VALUE DICT[KEY]\n        Set PAIR {\"key\": KEY, \"value\": VALUE}\n        Set RESULT PUSH(RESULT, PAIR)\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// ARRAY_TO_DICT - \u{5c06}\u{952e}\u{503c}\u{5bf9}\u{6570}\u{7ec4}\u{8f6c}\u{6362}\u{4e3a}\u{5b57}\u{5178}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\u{ff0c}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{4e3a} {\"key\": K, \"value\": V}\n// \u{8fd4}\u{56de}: \u{5b57}\u{5178}\nFunc ARRAY_TO_DICT(ARR) {\n    If (TYPE(ARR) != \"Array\") {\n        Return {}\n    }\n    \n    Set RESULT {}\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set PAIR ARR[I]\n        \n        If (TYPE(PAIR) == \"Dict\" && HAS(PAIR, \"key\") && HAS(PAIR, \"value\")) {\n            Set KEY PAIR[\"key\"]\n            Set VALUE PAIR[\"value\"]\n            Set RESULT[KEY] VALUE\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// ============================================================\n// \u{6570}\u{7ec4}\u{5b9e}\u{7528}\u{51fd}\u{6570}\n// ============================================================\n\n// TAKE - \u{83b7}\u{53d6}\u{6570}\u{7ec4}\u{7684}\u{524d} N \u{4e2a}\u{5143}\u{7d20}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   N - \u{6570}\u{91cf}\n// \u{8fd4}\u{56de}: \u{65b0}\u{6570}\u{7ec4}\nFunc TAKE(ARR, N) {\n    If (TYPE(ARR) != \"Array\" || N <= 0) {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    Set LIMIT N\n    \n    If (LIMIT > LEN_ARR) {\n        Set LIMIT LEN_ARR\n    }\n    \n    While (I < LIMIT) {\n        Set ITEM ARR[I]\n        Set RESULT PUSH(RESULT, ITEM)\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// DROP - \u{8df3}\u{8fc7}\u{6570}\u{7ec4}\u{7684}\u{524d} N \u{4e2a}\u{5143}\u{7d20}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   N - \u{6570}\u{91cf}\n// \u{8fd4}\u{56de}: \u{65b0}\u{6570}\u{7ec4}\nFunc DROP(ARR, N) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I N\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        Set RESULT PUSH(RESULT, ITEM)\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// CHUNK - \u{5c06}\u{6570}\u{7ec4}\u{5206}\u{5272}\u{6210}\u{6307}\u{5b9a}\u{5927}\u{5c0f}\u{7684}\u{5757}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n//   SIZE - \u{6bcf}\u{5757}\u{7684}\u{5927}\u{5c0f}\n// \u{8fd4}\u{56de}: \u{4e8c}\u{7ef4}\u{6570}\u{7ec4}\nFunc CHUNK(ARR, SIZE) {\n    If (TYPE(ARR) != \"Array\" || SIZE <= 0) {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set CHUNK_ARR []\n        Set J 0\n        \n        While (J < SIZE && (I + J) < LEN_ARR) {\n            Set ITEM ARR[(I + J)]\n            Set CHUNK_ARR PUSH(CHUNK_ARR, ITEM)\n            Set J (J + 1)\n        }\n        \n        Set RESULT PUSH(RESULT, CHUNK_ARR)\n        Set I (I + SIZE)\n    }\n    \n    Return RESULT\n}\n\n// FLATTEN - \u{6241}\u{5e73}\u{5316}\u{6570}\u{7ec4}\u{ff08}\u{4e00}\u{5c42}\u{ff09}\n// \u{53c2}\u{6570}:\n//   ARR - \u{4e8c}\u{7ef4}\u{6570}\u{7ec4}\n// \u{8fd4}\u{56de}: \u{4e00}\u{7ef4}\u{6570}\u{7ec4}\nFunc FLATTEN(ARR) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (TYPE(ITEM) == \"Array\") {\n            Set J 0\n            Set LEN_ITEM LEN(ITEM)\n            \n            While (J < LEN_ITEM) {\n                Set SUB_ITEM ITEM[J]\n                Set RESULT PUSH(RESULT, SUB_ITEM)\n                Set J (J + 1)\n            }\n        } Else {\n            Set RESULT PUSH(RESULT, ITEM)\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// UNIQUE - \u{6570}\u{7ec4}\u{53bb}\u{91cd}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n// \u{8fd4}\u{56de}: \u{53bb}\u{91cd}\u{540e}\u{7684}\u{65b0}\u{6570}\u{7ec4}\nFunc UNIQUE(ARR) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        Set FOUND False\n        Set J 0\n        Set LEN_RESULT LEN(RESULT)\n        \n        While (J < LEN_RESULT) {\n            If (RESULT[J] == ITEM) {\n                Set FOUND True\n                Set J LEN_RESULT\n            }\n            Set J (J + 1)\n        }\n        \n        If (!FOUND) {\n            Set RESULT PUSH(RESULT, ITEM)\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// COMPACT - \u{79fb}\u{9664}\u{6570}\u{7ec4}\u{4e2d}\u{7684} Null \u{503c}\n// \u{53c2}\u{6570}:\n//   ARR - \u{6570}\u{7ec4}\n// \u{8fd4}\u{56de}: \u{65b0}\u{6570}\u{7ec4}\nFunc COMPACT(ARR) {\n    If (TYPE(ARR) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    Set LEN_ARR LEN(ARR)\n    \n    While (I < LEN_ARR) {\n        Set ITEM ARR[I]\n        \n        If (TYPE(ITEM) != \"Null\") {\n            Set RESULT PUSH(RESULT, ITEM)\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// ZIP - \u{5c06}\u{591a}\u{4e2a}\u{6570}\u{7ec4}\u{5408}\u{5e76}\u{6210}\u{5143}\u{7ec4}\u{6570}\u{7ec4}\n// \u{53c2}\u{6570}:\n//   ARR1 - \u{7b2c}\u{4e00}\u{4e2a}\u{6570}\u{7ec4}\n//   ARR2 - \u{7b2c}\u{4e8c}\u{4e2a}\u{6570}\u{7ec4}\n// \u{8fd4}\u{56de}: \u{6570}\u{7ec4}\u{ff0c}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{4e3a} [ARR1[i], ARR2[i]]\nFunc ZIP(ARR1, ARR2) {\n    If (TYPE(ARR1) != \"Array\" || TYPE(ARR2) != \"Array\") {\n        Return []\n    }\n    \n    Set RESULT []\n    Set LEN1 LEN(ARR1)\n    Set LEN2 LEN(ARR2)\n    Set MIN_LEN LEN1\n    \n    If (LEN2 < MIN_LEN) {\n        Set MIN_LEN LEN2\n    }\n    \n    Set I 0\n    \n    While (I < MIN_LEN) {\n        Set ITEM1 ARR1[I]\n        Set ITEM2 ARR2[I]\n        Set PAIR [ITEM1, ITEM2]\n        Set RESULT PUSH(RESULT, PAIR)\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// ============================================================\n// \u{51fd}\u{6570}\u{7ec4}\u{5408}\u{5de5}\u{5177}\n// ============================================================\n\n// IDENTITY - \u{6052}\u{7b49}\u{51fd}\u{6570}\u{ff0c}\u{8fd4}\u{56de}\u{8f93}\u{5165}\u{503c}\u{672c}\u{8eab}\n// \u{53c2}\u{6570}:\n//   VALUE - \u{4efb}\u{610f}\u{503c}\n// \u{8fd4}\u{56de}: \u{8f93}\u{5165}\u{503c}\nFunc IDENTITY(VALUE) {\n    Return VALUE\n}\n\n// CONSTANT - \u{521b}\u{5efa}\u{4e00}\u{4e2a}\u{603b}\u{662f}\u{8fd4}\u{56de}\u{6307}\u{5b9a}\u{503c}\u{7684}\u{51fd}\u{6570}\n// \u{53c2}\u{6570}:\n//   VALUE - \u{8981}\u{8fd4}\u{56de}\u{7684}\u{503c}\n// \u{8fd4}\u{56de}: \u{8fd4}\u{56de}\u{8be5}\u{503c}\u{7684}\u{51fd}\u{6570}\u{5f15}\u{7528}\u{ff08}\u{5728} Aether \u{4e2d}\u{7b80}\u{5316}\u{4e3a}\u{76f4}\u{63a5}\u{8fd4}\u{56de}\u{503c}\u{ff09}\nFunc CONSTANT(VALUE) {\n    Return VALUE\n}\n\n// NEGATE - \u{5bf9}\u{8c13}\u{8bcd}\u{51fd}\u{6570}\u{53d6}\u{53cd}\n// \u{6ce8}\u{610f}\u{ff1a}Aether \u{4e2d}\u{51fd}\u{6570}\u{662f}\u{4e00}\u{7b49}\u{516c}\u{6c11}\u{4f46}\u{4e0d}\u{652f}\u{6301}\u{9ad8}\u{9636}\u{8fd4}\u{56de}\u{ff0c}\u{8fd9}\u{91cc}\u{4f5c}\u{4e3a}\u{6982}\u{5ff5}\u{51fd}\u{6570}\n// \u{53c2}\u{6570}:\n//   PREDICATE - \u{8c13}\u{8bcd}\u{51fd}\u{6570}\n// \u{8fd4}\u{56de}: \u{53d6}\u{53cd}\u{7684}\u{7ed3}\u{679c}\nFunc NEGATE(RESULT) {\n    Return !RESULT\n}\n\n// ============================================================\n// \u{6570}\u{503c}\u{5de5}\u{5177}\u{51fd}\u{6570}\n// ============================================================\n\n// RANGE_ARRAY - \u{751f}\u{6210}\u{6307}\u{5b9a}\u{8303}\u{56f4}\u{7684}\u{6570}\u{7ec4}\n// \u{53c2}\u{6570}:\n//   START - \u{8d77}\u{59cb}\u{503c}\n//   END - \u{7ed3}\u{675f}\u{503c}\u{ff08}\u{4e0d}\u{5305}\u{542b}\u{ff09}\n//   STEP - \u{6b65}\u{957f}\u{ff08}\u{9ed8}\u{8ba4}\u{4e3a}1\u{ff09}\n// \u{8fd4}\u{56de}: \u{6570}\u{7ec4}\nFunc RANGE_ARRAY(START, END, STEP) {\n    Set ACTUAL_STEP STEP\n    \n    If (TYPE(STEP) != \"Number\" || STEP == 0) {\n        Set ACTUAL_STEP 1\n    }\n    \n    Set RESULT []\n    Set CURRENT START\n    \n    If (ACTUAL_STEP > 0) {\n        While (CURRENT < END) {\n            Set RESULT PUSH(RESULT, CURRENT)\n            Set CURRENT (CURRENT + ACTUAL_STEP)\n        }\n    } Else {\n        While (CURRENT > END) {\n            Set RESULT PUSH(RESULT, CURRENT)\n            Set CURRENT (CURRENT + ACTUAL_STEP)\n        }\n    }\n    \n    Return RESULT\n}\n\n// TIMES - \u{6267}\u{884c}\u{51fd}\u{6570} N \u{6b21}\n// \u{53c2}\u{6570}:\n//   N - \u{6b21}\u{6570}\n//   FUNC - \u{8981}\u{6267}\u{884c}\u{7684}\u{51fd}\u{6570}\u{ff08}\u{63a5}\u{53d7}\u{7d22}\u{5f15}\u{53c2}\u{6570}\u{ff09}\n// \u{8fd4}\u{56de}: \u{7ed3}\u{679c}\u{6570}\u{7ec4}\nFunc TIMES(N, FUNC) {\n    If (TYPE(N) != \"Number\" || N <= 0) {\n        Return []\n    }\n    \n    Set RESULT []\n    Set I 0\n    \n    While (I < N) {\n        Set VALUE FUNC(I)\n        Set RESULT PUSH(RESULT, VALUE)\n        Set I (I + 1)\n    }\n    \n    Return RESULT\n}\n\n// ============================================================\n// \u{6761}\u{4ef6}\u{5de5}\u{5177}\n// ============================================================\n\n// COND - \u{6761}\u{4ef6}\u{9009}\u{62e9}\u{ff08}\u{7c7b}\u{4f3c} switch-case\u{ff09}\n// \u{53c2}\u{6570}:\n//   VALUE - \u{8981}\u{5224}\u{65ad}\u{7684}\u{503c}\n//   CONDITIONS - \u{6761}\u{4ef6}\u{6570}\u{7ec4}\u{ff0c}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{4e3a} {\"test\": \u{6d4b}\u{8bd5}\u{503c}, \"result\": \u{7ed3}\u{679c}\u{503c}}\n//   DEFAULT - \u{9ed8}\u{8ba4}\u{503c}\n// \u{8fd4}\u{56de}: \u{5339}\u{914d}\u{7684}\u{7ed3}\u{679c}\u{503c}\u{6216}\u{9ed8}\u{8ba4}\u{503c}\nFunc COND(VALUE, CONDITIONS, DEFAULT) {\n    If (TYPE(CONDITIONS) != \"Array\") {\n        Return DEFAULT\n    }\n    \n    Set I 0\n    Set LEN_COND LEN(CONDITIONS)\n    \n    While (I < LEN_COND) {\n        Set CONDITION CONDITIONS[I]\n        \n        If (TYPE(CONDITION) == \"Dict\" && HAS(CONDITION, \"test\") && HAS(CONDITION, \"result\")) {\n            Set TEST CONDITION[\"test\"]\n            \n            If (VALUE == TEST) {\n                Return CONDITION[\"result\"]\n            }\n        }\n        \n        Set I (I + 1)\n    }\n    \n    Return DEFAULT\n}\n\n// DEFAULT_TO - \u{5982}\u{679c}\u{503c}\u{4e3a} Null\u{ff0c}\u{8fd4}\u{56de}\u{9ed8}\u{8ba4}\u{503c}\n// \u{53c2}\u{6570}:\n//   VALUE - \u{503c}\n//   DEFAULT - \u{9ed8}\u{8ba4}\u{503c}\n// \u{8fd4}\u{56de}: VALUE \u{6216} DEFAULT\nFunc DEFAULT_TO(VALUE, DEFAULT) {\n    If (TYPE(VALUE) == \"Null\") {\n        Return DEFAULT\n    }\n    Return VALUE\n}\n\n";
Expand description

函数式编程工具