سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش زبان برنامه نویسی #F همراهتون هستیم. ایجاد و آماده سازی Lists در #F رو در سه جلسه داریم. در جلسه سوم به بیان ادامه جدول عملگرهای پایه List در #F می پردازیم و همچنین مثال هایی نیز در رابطه با فیلتر کردن یک لیست را با استفاده از روش List.filter در #F و مرتب سازی با List.sort در #F و مثال های دیگری داریم.
مقدار | توضیحات |
tryFindIndex : (‘T → bool) → ‘T list → int option | ایندکس اولین عنصر در فهرست را بازخوانی می کند که پیش فرض داده شده را برآورده می کند. اگر چنین عنصر وجود نداشته باشد، None را باز می گرداند. |
tryPick : (‘T → ‘U option) → ‘T list → ‘U option | تابع داده شده را به عناصر متوالی اعمال می کند، اولین نتیجه را باز می گرداند که در آن تابع Some را برای برخی از مقادیر به ارمغان می آورد. اگر چنین عنصر وجود نداشته باشد، None را برمی گرداند. |
unzip : (‘T1 * ‘T2) list → ‘T1 list * ‘T2 list | لیستی از جفت ها را به دو لیست تقسیم می کند. |
unzip3 : (‘T1 * ‘T2 * ‘T3) list → ‘T1 list * ‘T2 list * ‘T3 list | یک لیست سه تایی را به سه لیست تقسیم می شود. |
zip : ‘T1 list → ‘T2 list → (‘T1 * ‘T2) list | این دو لیست را در یک لیست دوگانه ترکیب می کند. این دو لیست باید طول برابر داشته باشند. |
zip3 : ‘T1 list → ‘T2 list → ‘T3 list → (‘T1 * ‘T2 * ‘T3) list | این سه لیست را در یک لیست سه گانه ترکیب می کند. لیست ها باید با هم برابر باشند. |
مثال های زیر استفاده از ویژگی های فوق و جدول های دو جلسه قبل را نشان می دهد .
این برنامه بازگشت یک لیست به صورت بازگشتی را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 | let list1 = [ 2; 4; 6; 8; 10; 12; 14; 16 ] printfn "The original list: %A" list1 let reverse lt = let rec loop acc = function | [] -> acc | hd :: tl -> loop (hd :: acc) tl loop [] lt printfn "The reversed list: %A" (reverse list1) |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 | The original list: [2; 4; 6; 8; 10; 12; 14; 16] The reversed list: [16; 14; 12; 10; 8; 6; 4; 2] |
با این حال، شما می توانید برای همین هدف از تابع rev از ماژول استفاده کنید .
1 2 3 | let list1 = [ 2; 4; 6; 8; 10; 12; 14; 16 ] printfn "The original list: %A" list1 printfn "The reversed list: %A" (List.rev list1) |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 | The original list: [2; 4; 6; 8; 10; 12; 14; 16] The reversed list: [16; 14; 12; 10; 8; 6; 4; 2] |
این برنامه فیلتر کردن یک لیست را با استفاده از روش List.filter در #F نشان می دهد.
1 2 3 4 | let list1 = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] printfn "The list: %A" list1 let list2 = list1 |> List.filter (fun x -> x % 2 = 0);; printfn "The Filtered list: %A" list2 |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 | The list: [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] The Filtered list: [2; 4; 6; 8; 10] |
بعد از مثال فیلتر کردن یک لیست را با استفاده از روش List.filter در #F سراغ مثال دیگری می رویم.
روش List.map یک لیست از یک نوع را به دیگری نشان می دهد.
1 2 3 4 | let list1 = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] printfn "The list: %A" list1 let list2 = list1 |> List.map (fun x -> (x * x).ToString());; printfn "The Mapped list: %A" list2 |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 | The list: [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] The Mapped list: ["1"; "4"; "9"; "16"; "25"; "36"; "49"; "64"; "81"; "100"] |
متد List.append و اپراتور @ یک لیست را به دیگری اضافه می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | let list1 = [1; 2; 3; 4; 5 ] let list2 = [6; 7; 8; 9; 10] let list3 = List.append list1 list2 printfn "The first list: %A" list1 printfn "The second list: %A" list2 printfn "The appened list: %A" list3 let lt1 = ['a'; 'b';'c' ] let lt2 = ['e'; 'f';'g' ] let lt3 = lt1 @ lt2 printfn "The first list: %A" lt1 printfn "The second list: %A" lt2 printfn "The appened list: %A" lt3 |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 3 4 5 6 | The first list: [1; 2; 3; 4; 5] The second list: [6; 7; 8; 9; 10] The appened list: [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] The first list: ['a'; 'b'; 'c'] The second list: ['e'; 'f'; 'g'] The appened list: ['a'; 'b'; 'c'; 'e'; 'f'; 'g'] |
روش List.sort لیستی را مرتب می کند( مرتب سازی با List.sort در #F ).
روش List.sum مجموع عناصر در لیست را می دهد.
و روش List.average متوسط عناصر در لیست را می دهد.
1 2 3 4 5 6 7 8 9 10 | let list1 = [9.0; 0.0; 2.0; -4.5; 11.2; 8.0; -10.0] printfn "The list: %A" list1 let list2 = List.sort list1 printfn "The sorted list: %A" list2 let s = List.sum list1 let avg = List.average list1 printfn "The sum: %f" s printfn "The average: %f" avg |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 3 4 | The list: [9.0; 0.0; 2.0; -4.5; 11.2; 8.0; -10.0] The sorted list: [-10.0; -4.5; 0.0; 2.0; 8.0; 9.0; 11.2] The sum: 15.700000 The average: 2.242857 |
عملیات “fold” یک تابع را برای هر عنصر در یک لیست اعمال می کند، نتیجه تابع را در یک متغیر accumulator جمع می کند و accumulator را به عنوان نتیجه عملیات بازمی گرداند.
روش List.fold تابع را به هر عنصر از چپ به راست اعمال می کند، در حالی که List.foldBack یک تابع را برای هر عنصر از راست به چپ اعمال می کند.
1 2 | let sumList list = List.fold (fun acc elem -> acc + elem) 0 list printfn "Sum of the elements of list %A is %d." [ 1 .. 10 ] (sumList [ 1 .. 10 ]) |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 | Sum of the elements of list [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] is 55. |
در جلسه سوم به بیان ادامه جدول عملگرهای پایه List در #F پرداختیم .
و همچنین مثال هایی نیز در رابطه با فیلتر کردن یک لیست را با استفاده از روش List.filter در #F و مرتب سازی با List.sort در #F و مثال های دیگری رو بررسی نمودیم.