jika Anda memiliki fungsi "test a b" yang mengembalikan nilai true jika a dan b terhubung secara langsung dan jika Anda memiliki daftar hal-hal yang tidak berurutan, apa solusi yang elegan dan cepat untuk memfilter semua hal yang terhubung dari daftar yang diberikan?
Contoh:
let test a b = let diff = a - b in diff == 0 ;;
let lst = [4;1;7;3;8;9;2;0] ;;
filter_connected 2 lst ;;
-> [4;1;3;2;0]
Ada petunjuk?
Hmmm, saya akan mencoba memperjelas pertanyaan saya...
- ada daftar hal-hal yang tidak disortir, pe. "biarkan lst = [a;b;c;d;e;f;g;h];;" dengan tipe val a' daftar
- terdapat juga fungsi yang memutuskan apakah dua hal dapat dihubungkan secara langsung atau dengan kata lain, jika kedua hal tersebut bertetangga langsung: val test : a' -> a' -> bool
- yang saya butuhkan adalah fungsi yang memiliki tiga argumen, yang pertama adalah hal yang spesifik, yang kedua adalah daftar hal-hal yang tidak disortir seperti yang disarankan di atas, yang terakhir adalah fungsi pengujian yang dijelaskan di atas: val filter_connected : a' -> a ' daftar -> (a' -> a' -> bool) -> a' daftar
jika a ‹-> b bertetangga langsung dan b ‹-> c bertetangga langsung maka [a;b;c] terhubung.
"List.filter () lst" yang disarankan tidak membantu di sini, karena hanya memfilter tetangga yang diarahkan.
Pada contoh di atas dengan a ‹-> b dan b ‹-> c sebagai tetangga langsung jika ada fungsi uji, dan yang lainnya tidak, panggilan "filter_connected" akan menjadi:
"filter_connected b pertama (tes);;"
dan akan kembali: [a;b;c]
Semoga semakin bersih...
diff = 0
di mana Anda menulisdiff == 0
, jika hanya karena mereka melakukan hal yang sama dalam implementasi saat ini. Tapi sekali lagi, jikatest
adalah contoh dari apa yang Anda maksud dengan terhubung, mengapa Anda tidak meneruskannya kefilter_connected
dan yang lebih penting, bukankah definisi keterhubungan itu hanyalah kesetaraan dan bagaimana cara menggunakannya untuk mendapatkan[4;1;3;2;0]
? - person Pascal Cuoq   schedule 15.03.2010