再帰的なリスト

頭と尾

[ヘッド| テール] = [1] #head 1     尾[] 
[ヘッド | 尾] = [1、2、3] #head 1尾[2、3 ] 
[ヘッド | テール] = []#报错

 

マッピング機能を作成します。

  あなたは、より複雑な処理を受け入れることができるように、我々はそれが関数に渡された関数に応じて異なって処理することができ、リスト内の各要素を処理するための機能を使用することができます。

[]:DEF([]、_func)、ないマップ
デフ([ヘッドマップ。|、ん、FUNC尾を]):[FUNC(頭を)| マップ(尾、FUNC)] 

Example.map [ 1,2,3,4]、FN N - > N×n個の         #[1、4、9、16]

 

再帰的なプロセスで値を追跡

  私たちの目標は不変の状態を使用することで、それがグローバル変数またはモジュールレベル変数の値格納されている実施形態にすることはできません。そこで、我々は、関数にパラメータを渡します

SUM DEF([]、合計)、実行します。総
DEF SUM([先頭 |尾]、合計)、SUMを行う(尾、合計+ ヘッド)

Example.sum([ 1,2,3,4]、0)# 10は
    
    以下のように#私たちは常に初期値を渡す必要が改善することができる
DEF SUM(一覧)は、ん:SUM(リスト、 0 

DEFp _sum([]、合計)に追加、操作を行います。総
DEFpの_sumは(に追加[ヘッド |尾]、合計)、実行します。和(尾、合計+ヘッド)

  この問題を解決するための関数を使用

DEF、([]、値、_)削減を実行します。値
([ヘッド減らすDEF |尾]、値、FUNC)、実行します(テール、FUNC(ヘッド。削減すると 、値)、FUNC)#の中で使用無名関数を引数リストの前にプラスの点(。)

Example.reduce

 

より複雑なリスト

  

データの奇数が指定された場合#は、近い二つのデータ交換を
[]:スワップDEF([])、実行
([A、B DEFスワップ | [B、A:|尾])、行うスワップ(尾)] 
DEFスワップ([_])、ん:昇給「スワップAN ODDとのリスト要素のCan`t Aナンバー」

  使用することができます[、...、X |尾]データのセットと一致

#[タイムスタンプは、location_idの、温度、降水量は] このデータセットは、天気を表す
の#バージョン
[]:DEFのfor_location_27([])、やる
DEF for_location_27([[時間、やる|尾27、TEMP、雨]])
  [[時間、27、TEMP、雨] | for_location_27(尾)]#のlocation_idのは、27のデータのセットスクリーニング
終了 ([_ DEF for_location_27
for_location_27(尾)#データフォーマットの不一致のセットをスキップ:|尾])、行いをで

#バージョン2
件以上の着信データをフィルタリングします
[]:DEFのfor_location([]、_target_loc)、やる
ん| DEF for_location(、target_loc [尾[時刻、target_loc、TEMP、雨が]])
  [[時間、target_loc、TEMP、雨] | for_location(尾、target_loc)]
エンド
DEFのfor_location([_ |尾]、target_loc)、実行します。for_location(尾、target_loc)

#3番目のバージョン
#マッチング機能は、に簡素化:
DEFのfor_location(ヘッド= [_、target_loc、_、_] |尾]、target_loc)、行う:[ヘッド| for_location(尾、target_loc)]

 

Listモジュールは、機能を提供します

  接続。[1、2、3] + [4、5、6]

  一次元。List.flatten([[[1]、[2]、[[[3]]]])=> [1、2、3]

  折叠.List.foldl([1、2、3]、 ""、FNの値は、ACC - > "#{値}(#{} ACC)" 端)=> 3(2(1()))

     List.foldr([1、2、3]、 ""、FNの値は、ACC - > "#{値}(#{} ACC)" 端)=> 1(2(3()))

  合并、拆分.L = List.zip([1、2、3]、[:、:B:C]、[ "猫"、 "犬"]])=> {1、。 、 "猫"}、{2、A:B、 "犬"}]

        List.unzip(L)=> [1、2]、[:、:B]、[ "猫"、 "犬"]

  リストのアクセスタプル。KW = [{名前、 "デイブ"}、{:好き、 "Programmin"}、{:ここで、 "ダラス"、 "TX"}]

           List.keyfind(KW ,:名前、0){名前、「デイブ」}パラメータ:リスト、データ値のタプル、タプルの添え字

           List.keyfind(KW、 "TX"、2){:、 "ダラス"、 "TX"}

           List.keyfind(キロワット、 "TX"、1)ゼロ

  タプルを削除します。List.keydelete(キロワット、 "TX"、2)

  タプルを交換してください。List.keyreplace(KW ,:名前、0、{:FIRST_NAME、 "デイブ"})

おすすめ

転載: www.cnblogs.com/lr1402585172/p/11497050.html