Я пытаюсь обменять два элемента в списке, не совсем уверен, почему мины не работают.OCaml swapping элементы в списке
Правильная реализация должна сделать следующее:
list_swap_val [5;6;7;3] 75 => [7;6;5;3]
list_swap_val [5;6;3] 7 5 => [7;6;3]
Вот две реализации, которые я пробовал, но оба, кажется, просто вернуть первоначальный список
let rec list_swap l u v =
match l with
|[] -> []
|h::t -> if h = u then u::(list_swap t u v)
else if h = v then v::(list_swap t u v)
else h::(list_swap t u v) ;;
Я также пытался сделать выше но в то время как в операциях совпадения вместо использования if, но оба они не работают. Где я иду не так? Спасибо за любую помощь
Какое сообщение об ошибке у вас есть? Пожалуйста, будьте более конкретными. Кроме того, посмотрите на «a», «b», затем посмотрите на «u» и «v» ;-) – coredump
О, извините, я хотел сохранить параметры одинаковыми. Я просто получаю тот же список, и ничего не изменилось, когда я пытаюсь выполнить код в примерах. –
Когда вы видите 'u', первый элемент в возвращаемом списке должен быть' v' (и наоборот для 'v 'и' u'). Здесь, как если бы вы создавали 'h: :(list_swap t u v)' во всех случаях. Прошло некоторое время с тех пор, как я закодировал в OCaml, но я думаю, вы можете избежать использования шаблона if и use, чтобы различать все случаи. – coredump