Я не знаю, что такое ConvexHull, но я предполагаю, что понял проблему
getCH[pts_]:=pts[[ConvexHull[pts]]]
getCH[pts_]:=Extract[pts, Transpose@{ConvexHull[pts]}]
Если вы хотите, чтобы pts появлялся только один раз, по какой-то причине вы всегда можете использовать With, Module или Block,Я думаю, что наиболее важно сказать, что я не вижу смысла в этом.С, эффективно заменяет каждое появление очков списком очков.Похоже, это излишне, но вы можете написать
getCH[pts_]:=With[{p=pts},p[[ConvexHull[p]]]]
Модуль создает новую переменную.Обычно это медленнее, чем с, для случаев, когда вашей переменной не нужно присваивать значение.Другими словами, С быстрее для определения констант.Блок, я думаю, также быстрее, чем Module (немного), но его динамическая область видимости (против лексической области видимости Module) делает его немного более странным.Множество потоков об этом.
Я не думаю, что есть какая-либо встроенная функция, которая берет список и функцию или символ и извлекает элементы из этого списка, проиндексированные в результате оценки функции на том же самомсписок, если это то, что вы искали для вашей "общей" проблемы.Конечно, вы можете легко создать его, а затем использовать в будущем.Я думаю, что это слишком много для такой простой проблемы, но, возможно, это функциональное программирование, к которому вы стремились
ExtractIndexed[l_List, fun_]:=l[[fun[l]]]
getCH[pts_]:=ExtractIndexed[pts, ConvexHull]