Если вы хотите украсить свой список с индексом вы могли бы попробовать что-то вроде следующего
fun add_index l =
let
fun add_index_helper (nil, _) = nil
| add_index_helper (h::tl,i) = (h,i) :: add_index_helper (tl,1+i)
in
add_index_helper (l,0)
end
val x = add_index [0,1,4,9,16,25]
но вы также можете просто напрямую вычислить паритет с тем же методом
fun add_sign l =
let
fun add_sign_helper (nil, _) = nil
| add_sign_helper (h::tl,i) = (h,i) :: add_sign_helper (tl,1-i)
in
add_sign_helper (l,0)
end
val y = add_sign [0,1,4,9,16,25]
, то вы можете сопоставить четность со строкой
fun sign_to_char (x,0) = (x,"+")
| sign_to_char (x,_) = (x,"-")
val z = List.map sign_to_char y
или вы можете просто добавить знак непосредственно
fun add_char l =
let
fun add_char_helper (nil, _) = nil
| add_char_helper (h::tl,0) = (h,"+") :: add_char_helper (tl,1)
| add_char_helper (h::tl,_) = (h,"-") :: add_char_helper (tl,0)
in
add_char_helper (l,0)
end
val zz = add_char [0,1,4,9,16,25]
В качестве альтернативы, если у вас есть список строк и вы хотите добавить символы, вы можете попробовать что-то вроде этого
fun signs L =
let
datatype parity = even | odd
fun signs_helper (nil ,_) = nil
| signs_helper (x::xs,even) = ("+"^x) :: signs_helper(xs,odd)
| signs_helper (x::xs,odd) = ("-"^x) :: signs_helper(xs,even)
in
signs_helper (L,even)
end
val z = signs ["x","2y","3z","4"]
(* this gives you val z = ["+x","-2y","+3z","-4"] : string list *)
Примером ввода и ожидаемого выхода было бы полезно. Вводится ли список строк? –