String f#函数,用于在不使用内置方法的情况下检查字符串是否为回文
f#初学者尝试检查字符串在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
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