если у вас есть функция «test a b», которая возвращает истину, если a и b подключены напрямую, и если у вас есть заданный неупорядоченный список вещей, что было бы элегантным и быстрым решением для фильтрации всех подключенных вещей из данного списка?
Пример:
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]
Какие-нибудь намеки?
Хммм, попробую уточнить свой вопрос ...
- существует несортированный список вещей, pE. "let lst = [a; b; c; d; e; f; g; h] ;;" с типом val a 'list
- существует также функция, которая определяет, могут ли две вещи соединяться напрямую или, другими словами, если две вещи являются прямыми соседями: val test: a '-> a' -> bool
- мне нужна функция с тремя аргументами, первый - это конкретная вещь, второй - несортированный список вещей, как предложено выше, последний - это тестовая функция, описанная выше: val filter_connected: a '-> a 'список -> (a' -> a '-> bool) -> a' список
если a ‹-> b - прямые соседи, а b ‹-> c - прямые соседи, то [a; b; c] связаны.
Предлагаемый "List.filter () lst" здесь не помогает, потому что он фильтрует только направленных соседей.
В приведенном выше примере с a ‹-> b и b ‹-> c в качестве прямых соседей в случае тестовой функции, а для всех остальных - нет, вызов "filter_connected" будет:
"filter_connected b lst (test) ;;"
и вернет: [a; b; c]
Надеюсь, будет чище ...
diff = 0
, где написалиdiff == 0
, хотя бы потому, что они делают то же самое в текущих реализациях. Но опять же, еслиtest
- это пример того, что вы подразумеваете под соединением, почему вы не передаете его вfilter_connected
и, что более важно, не является ли это определение связанности просто равенством и как его использовать для получения[4;1;3;2;0]
? - person Pascal Cuoq   schedule 15.03.2010