Я новичок в SML, и я пытаюсь получить индекс элемента в списке. Я знаю, что использование List.nth даст мне значение элемента в позиции индекса, но я хочу значение индекса. Там может быть встроенная функция, о которой я не знаю. В моем случае список не будет содержать дубликатов, поэтому, если элемент находится в списке, я получаю индекс, если он не возвращает ~ 1. Вот код, который у меня есть. Это работает, но я не думаю, что это очень чистый:SML: получить индекс элемента в списке
val L=[1,2,3,4,5];
val m=length L-1;
fun Index(item, m, L)=if m<0 then ~1 else
if List.nth(L, m)=item then m else Index(item,m-1,L);
В чем ваш вопрос? Я считаю, что нет стандартной функции, которая делает это явно, по крайней мере, в структуре списка. Что касается очистки кода, я бы предложил 1) использовать опцию или исключение вместо возврата '~ 1', 2) скрыть параметр' m', обернув функцию во внешней функции, 3) использовать сопоставление шаблонов на 'm 'для устранения одного условного (' if m <0 ... ') – waldrumpus
Спасибо за советы. Вопрос был действительно: «Каков наилучший способ сделать это?». Было бы неплохо передать m в функцию, так как она в любом случае зависит от длины L, но, как я уже сказал, я новичок в SML и не знаю, как совместить эти два. Причина для кода: У меня есть два списка разных типов, которые связаны между собой. Обновление элемента в списке 1 требует обновления элемента в той же позиции в списке два. Я считаю, что структура List может предоставить что-то вроде этого «zip», но сейчас это работает. –