Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如何从任何复杂项中提取proplist{K,V}列表_Erlang - Fatal编程技术网

Erlang 如何从任何复杂项中提取proplist{K,V}列表

Erlang 如何从任何复杂项中提取proplist{K,V}列表,erlang,Erlang,有一个术语,它可能由任何东西组成,如命令、命令列表、命令列表、列表列表、命令列表或。。。例如: Term1 = [ {"AAA", [ { "K1", "ka1" }, { "K2", "ka2" }, { "K3", "ka3" } ] }, {"BBB","one"}, {"CCC", [

有一个术语,它可能由任何东西组成,如命令、命令列表、命令列表、列表列表、命令列表或。。。例如:

Term1 = [ 
      {"AAA", [ 
               { "K1", "ka1" },
               { "K2", "ka2" }, 
               { "K3", "ka3" } 
              ]
      },
      {"BBB","one"},
      {"CCC", [ 
               { "K1", "kb1" },
               { "K2", "" }, 
               { "K3", "kb3" } 
              ]
      },
      {"DDD", [ 
                [
                 { "K1", "kc1" },
                 { "K2", "kc2" }
                ],
                [
                 { "K1", "kd1" },
                 { "K2", "kd2" }
                ],
                "CACETA",
                123
              ]
      },
      {"EEE", [ 
               { "K1", "kb1" },
               { "K2", 1122  }, 
               { "K3", "kb3" } 
              ]
      },
              { "T1", "T2", "T3" },
              123,
              { "X" },
              [ 1, 2, 3, { "K5", "V5" } ] 
],
我需要生成一个包含所有proplist[{K,V},…]的列表

[
   { "AAA" , [ ...... ] },
   { "K1"  , "ka1" },
   { "K2" , "ka2" }, 
   ...
   { "BBB" ,"one"},
   { "CCC" , [ ... ] },
   { "K1"  , "kb1" },
   ...
   { "K5", "V5" } 
]
  • 请注意,有些键必须在列表中重复,它们的值可以是字符串、列表、元组或数字,也可以是任何值

  • 上面示例中数据中的最后一项,例如{“T1”、“T2”、“T3”},不应该出现在结果中,因为它不是两个术语{K,V}的proplist,而是嵌套的{“K5”、“V5”}是并且应该是结果的一部分

我看了这个类似的例子,并试图对它进行一些调整,但对于我的新手erlang brain来说,要让它在上面的场景中工作变得越来越困难

下面是一个示例,我正试图使用它使其工作,但存在一些与模式匹配相关的错误:

extractPropList( [], ResultList ) -> ResultList;

extractPropList( [H|T], ResultList ) -> extractPropList(T, extractPropList(H, ResultList));

extractPropList( {K,V}, ResultList ) -> [ {K,V} | extractPropList(K, extractPropList(V, ResultList)) ].

在测试上述方法时,缺少的部分是处理没有其他匹配项(不是列表,不是{K,V})的术语的最后一行:

给定与avove相似的数据,我得到的结果如下

[{"EEE",[{"K1","kb1"},{"K2",1122},{"K3","kb3"}]},
 {"K3","kb3"},
 {"K2",1122},
 {"K1","kb1"},
 {"DDD",
  [[{"K1","kc1"},{"K2","kc2"}],
   [{"K1","kd1"},{"K2","kd2"}],
   "CACETA",123]},
 {"K2","kd2"},
 {"K1","kd1"},
 {"K2","kc2"},
 {"K1","kc1"},
 {"CCC",[{"K1","kb1"},{"K2","kb2"},{"K3","kb3"}]},
 {"K3","kb3"},
 {"K2","kb2"},
 {"K1","kb1"},
 {"BBB","one"},
 {"AAA",[{"K1","ka1"},{"K2","ka2"},{"K3","ka3"}]},
 {"K3","ka3"},
 {"K2","ka2"},
 {"K1","ka1"}]

在测试上述方法时,缺少的部分是处理没有其他匹配项(不是列表,不是{K,V})的术语的最后一行:

给定与avove相似的数据,我得到的结果如下

[{"EEE",[{"K1","kb1"},{"K2",1122},{"K3","kb3"}]},
 {"K3","kb3"},
 {"K2",1122},
 {"K1","kb1"},
 {"DDD",
  [[{"K1","kc1"},{"K2","kc2"}],
   [{"K1","kd1"},{"K2","kd2"}],
   "CACETA",123]},
 {"K2","kd2"},
 {"K1","kd1"},
 {"K2","kc2"},
 {"K1","kc1"},
 {"CCC",[{"K1","kb1"},{"K2","kb2"},{"K3","kb3"}]},
 {"K3","kb3"},
 {"K2","kb2"},
 {"K1","kb1"},
 {"BBB","one"},
 {"AAA",[{"K1","ka1"},{"K2","ka2"},{"K3","ka3"}]},
 {"K3","ka3"},
 {"K2","ka2"},
 {"K1","ka1"}]