pub const SET: &str = "// stdlib/set.aether\n// Aether \u{96c6}\u{5408}\u{ff08}Set\u{ff09}\u{6570}\u{636e}\u{7ed3}\u{6784}\u{5e93}\n// \u{63d0}\u{4f9b}\u{96c6}\u{5408}\u{7684}\u{57fa}\u{672c}\u{64cd}\u{4f5c}\u{ff0c}\u{4f7f}\u{7528}\u{6570}\u{7ec4}\u{5b9e}\u{73b0}\u{ff0c}\u{786e}\u{4fdd}\u{5143}\u{7d20}\u{552f}\u{4e00}\u{6027}\n\n// ==================== \u{521b}\u{5efa}\u{96c6}\u{5408} ====================\n\n// \u{521b}\u{5efa}\u{4e00}\u{4e2a}\u{7a7a}\u{96c6}\u{5408}\nFunc SET_NEW() {\n Return []\n}\n\n// \u{4ece}\u{6570}\u{7ec4}\u{521b}\u{5efa}\u{96c6}\u{5408}\u{ff08}\u{81ea}\u{52a8}\u{53bb}\u{91cd}\u{ff09}\nFunc SET_FROM_ARRAY(ARR) {\n Set RESULT []\n Set LEN_ LEN(ARR)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM ARR[I]\n If (!SET_CONTAINS(RESULT, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{57fa}\u{672c}\u{64cd}\u{4f5c} ====================\n\n// \u{5411}\u{96c6}\u{5408}\u{4e2d}\u{6dfb}\u{52a0}\u{5143}\u{7d20}\u{ff08}\u{5982}\u{679c}\u{4e0d}\u{5b58}\u{5728}\u{ff09}\n// \u{8fd4}\u{56de}\u{65b0}\u{7684}\u{96c6}\u{5408}\nFunc SET_ADD(SET, ITEM) {\n If (SET_CONTAINS(SET, ITEM)) {\n Return SET\n }\n Return PUSH(SET, ITEM)\n}\n\n// \u{4ece}\u{96c6}\u{5408}\u{4e2d}\u{79fb}\u{9664}\u{5143}\u{7d20}\n// \u{8fd4}\u{56de}\u{65b0}\u{7684}\u{96c6}\u{5408}\nFunc SET_REMOVE(SET, ITEM) {\n Set RESULT []\n Set LEN_ LEN(SET)\n Set I 0\n \n While (I < LEN_) {\n If (SET[I] != ITEM) {\n Set RESULT PUSH(RESULT, SET[I])\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{68c0}\u{67e5}\u{96c6}\u{5408}\u{662f}\u{5426}\u{5305}\u{542b}\u{5143}\u{7d20}\nFunc SET_CONTAINS(SET, ITEM) {\n Set LEN_ LEN(SET)\n Set I 0\n \n While (I < LEN_) {\n If (SET[I] == ITEM) {\n Return True\n }\n Set I (I + 1)\n }\n \n Return False\n}\n\n// \u{83b7}\u{53d6}\u{96c6}\u{5408}\u{5927}\u{5c0f}\nFunc SET_SIZE(SET) {\n Return LEN(SET)\n}\n\n// \u{68c0}\u{67e5}\u{96c6}\u{5408}\u{662f}\u{5426}\u{4e3a}\u{7a7a}\nFunc SET_IS_EMPTY(SET) {\n Return LEN(SET) == 0\n}\n\n// \u{6e05}\u{7a7a}\u{96c6}\u{5408}\nFunc SET_CLEAR() {\n Return []\n}\n\n// ==================== \u{96c6}\u{5408}\u{8fd0}\u{7b97} ====================\n\n// \u{5e76}\u{96c6}\u{ff1a}\u{8fd4}\u{56de}\u{5305}\u{542b}\u{4e24}\u{4e2a}\u{96c6}\u{5408}\u{6240}\u{6709}\u{5143}\u{7d20}\u{7684}\u{65b0}\u{96c6}\u{5408}\nFunc SET_UNION(SET1, SET2) {\n Set RESULT SET1\n Set LEN_ LEN(SET2)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM SET2[I]\n If (!SET_CONTAINS(RESULT, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{4ea4}\u{96c6}\u{ff1a}\u{8fd4}\u{56de}\u{4e24}\u{4e2a}\u{96c6}\u{5408}\u{5171}\u{6709}\u{7684}\u{5143}\u{7d20}\nFunc SET_INTERSECTION(SET1, SET2) {\n Set RESULT []\n Set LEN_ LEN(SET1)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM SET1[I]\n If (SET_CONTAINS(SET2, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{5dee}\u{96c6}\u{ff1a}\u{8fd4}\u{56de}\u{5728}\u{7b2c}\u{4e00}\u{4e2a}\u{96c6}\u{5408}\u{4f46}\u{4e0d}\u{5728}\u{7b2c}\u{4e8c}\u{4e2a}\u{96c6}\u{5408}\u{7684}\u{5143}\u{7d20}\nFunc SET_DIFFERENCE(SET1, SET2) {\n Set RESULT []\n Set LEN_ LEN(SET1)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM SET1[I]\n If (!SET_CONTAINS(SET2, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{5bf9}\u{79f0}\u{5dee}\u{96c6}\u{ff1a}\u{8fd4}\u{56de}\u{53ea}\u{5728}\u{5176}\u{4e2d}\u{4e00}\u{4e2a}\u{96c6}\u{5408}\u{7684}\u{5143}\u{7d20}\nFunc SET_SYMMETRIC_DIFFERENCE(SET1, SET2) {\n Set DIFF1 SET_DIFFERENCE(SET1, SET2)\n Set DIFF2 SET_DIFFERENCE(SET2, SET1)\n Return SET_UNION(DIFF1, DIFF2)\n}\n\n// ==================== \u{96c6}\u{5408}\u{5173}\u{7cfb} ====================\n\n// \u{68c0}\u{67e5}\u{7b2c}\u{4e00}\u{4e2a}\u{96c6}\u{5408}\u{662f}\u{5426}\u{662f}\u{7b2c}\u{4e8c}\u{4e2a}\u{96c6}\u{5408}\u{7684}\u{5b50}\u{96c6}\nFunc SET_IS_SUBSET(SET1, SET2) {\n Set LEN_ LEN(SET1)\n Set I 0\n \n While (I < LEN_) {\n If (!SET_CONTAINS(SET2, SET1[I])) {\n Return False\n }\n Set I (I + 1)\n }\n \n Return True\n}\n\n// \u{68c0}\u{67e5}\u{7b2c}\u{4e00}\u{4e2a}\u{96c6}\u{5408}\u{662f}\u{5426}\u{662f}\u{7b2c}\u{4e8c}\u{4e2a}\u{96c6}\u{5408}\u{7684}\u{8d85}\u{96c6}\nFunc SET_IS_SUPERSET(SET1, SET2) {\n Return SET_IS_SUBSET(SET2, SET1)\n}\n\n// \u{68c0}\u{67e5}\u{4e24}\u{4e2a}\u{96c6}\u{5408}\u{662f}\u{5426}\u{4e0d}\u{76f8}\u{4ea4}\u{ff08}\u{6ca1}\u{6709}\u{5171}\u{540c}\u{5143}\u{7d20}\u{ff09}\nFunc SET_IS_DISJOINT(SET1, SET2) {\n Set LEN_ LEN(SET1)\n Set I 0\n \n While (I < LEN_) {\n If (SET_CONTAINS(SET2, SET1[I])) {\n Return False\n }\n Set I (I + 1)\n }\n \n Return True\n}\n\n// \u{68c0}\u{67e5}\u{4e24}\u{4e2a}\u{96c6}\u{5408}\u{662f}\u{5426}\u{76f8}\u{7b49}\nFunc SET_EQUALS(SET1, SET2) {\n If (LEN(SET1) != LEN(SET2)) {\n Return False\n }\n \n Return SET_IS_SUBSET(SET1, SET2)\n}\n\n// ==================== \u{5b9e}\u{7528}\u{51fd}\u{6570} ====================\n\n// \u{5c06}\u{96c6}\u{5408}\u{8f6c}\u{6362}\u{4e3a}\u{6570}\u{7ec4}\nFunc SET_TO_ARRAY(SET) {\n Return SET\n}\n\n// \u{904d}\u{5386}\u{96c6}\u{5408}\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{4e00}\u{4e2a}\u{53c2}\u{6570}\u{ff08}\u{5143}\u{7d20}\u{ff09}\nFunc SET_FOREACH(SET, FUNC) {\n Set LEN_ LEN(SET)\n Set I 0\n \n While (I < LEN_) {\n FUNC(SET[I])\n Set I (I + 1)\n }\n}\n\n// \u{8fc7}\u{6ee4}\u{96c6}\u{5408}\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{96c6}\u{5408}\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 SET_FILTER(SET, PREDICATE) {\n Set RESULT []\n Set LEN_ LEN(SET)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM SET[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{96c6}\u{5408}\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{96c6}\u{5408}\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 SET_MAP(SET, MAPPER) {\n Set RESULT []\n Set LEN_ LEN(SET)\n Set I 0\n \n While (I < LEN_) {\n Set MAPPED MAPPER(SET[I])\n If (!SET_CONTAINS(RESULT, MAPPED)) {\n Set RESULT PUSH(RESULT, MAPPED)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{5c06}\u{96c6}\u{5408}\u{8f6c}\u{6362}\u{4e3a}\u{5b57}\u{7b26}\u{4e32}\u{8868}\u{793a}\nFunc SET_TO_STRING(SET) {\n If (SET_IS_EMPTY(SET)) {\n Return \"{}\"\n }\n \n Set RESULT \"{\"\n Set LEN_ LEN(SET)\n Set I 0\n \n While (I < LEN_) {\n Set RESULT (RESULT + TO_STRING(SET[I]))\n If (I < (LEN_ - 1)) {\n Set RESULT (RESULT + \", \")\n }\n Set I (I + 1)\n }\n \n Set RESULT (RESULT + \"}\")\n Return RESULT\n}\n";Expand description
集合(Set)数据结构