String f#函数,用于在不使用内置方法的情况下检查字符串是否为回文

String f#函数,用于在不使用内置方法的情况下检查字符串是否为回文,string,f#,String,F#,f#初学者尝试检查字符串在f#中是否为回文,无需反向或内置方法。这是我到目前为止的想法,我觉得我离目标很近。这不是当前正在编译的 let ispalidrome (str:string) = let strlength = str.Length let result = for i in 0 .. < strlength / 2 do if str.[0] <> strlength

f#初学者尝试检查字符串在f#中是否为回文,无需反向或内置方法。这是我到目前为止的想法,我觉得我离目标很近。这不是当前正在编译的

       let ispalidrome (str:string) =
            let strlength = str.Length 
            let result = for i in 0 .. < strlength / 2 do
                if str.[0] <> strlength then false
                else true

             result
        //unit test
        ispalidrome "noon"
let ispalidrome(str:string)=
设strlength=str.Length
设结果=对于0中的i..
您的代码的主要问题是,在F#中,您无法中断
for
循环。这意味着您需要使用递归编写迭代,而不是使用
for
循环(F#对命令式编程有一些支持,但不支持命令式
中断
继续
返回

最简单的方法是编写一个内部
循环
函数,该函数获取我们当前正在查看的索引。如果在单词的一半之后,我们返回
true
。否则,我们比较
str.[i]
str.[str.Length-1-i]
并递归调用函数:

let ispalidrome (str:string) =
  let rec loop i =
    if i > str.Length / 2 then true
    else str.[i] = str.[str.Length-1-i] && loop (i + 1)
  loop 0

代码的主要问题是,在F#中,不能从
for
循环中断。这意味着您需要使用递归编写迭代,而不是使用
for
循环(F#对命令式编程有一些支持,但不支持命令式
中断
继续
返回

最简单的方法是编写一个内部
循环
函数,该函数获取我们当前正在查看的索引。如果在单词的一半之后,我们返回
true
。否则,我们比较
str.[i]
str.[str.Length-1-i]
并递归调用函数:

let ispalidrome (str:string) =
  let rec loop i =
    if i > str.Length / 2 then true
    else str.[i] = str.[str.Length-1-i] && loop (i + 1)
  loop 0