我想写一个函数,它接受一个字符串并返回一个char列表。这是一个函数,但我认为这不是我想做的(我想要一个字符串并返回一个字符列表)。字符串到字符列表
let rec string_to_char_list s =
match s with
| "" -> []
| n -> string_to_char_list n
我想写一个函数,它接受一个字符串并返回一个char列表。这是一个函数,但我认为这不是我想做的(我想要一个字符串并返回一个字符列表)。字符串到字符列表
let rec string_to_char_list s =
match s with
| "" -> []
| n -> string_to_char_list n
除了,但很重要:
你的代码显然是错误的,因为你有一个递归调用的各个参数,你在得到了相同的一个准确这是要引起无限序列。的呼叫具有相同的值,从而永远循环(堆栈溢出不会发生在尾录位置)。
,你想要做将是什么代码:
let explode s =
let rec exp i l =
if i < 0 then l else exp (i - 1) (s.[i] :: l) in
exp (String.length s - 1) []
来源: http://caml.inria.fr/pub/old_caml_site/FAQ/FAQ_EXPERT-eng.html#strings
或者,您也可以选择使用图书馆:电池String.to_list或EXTLIB String.explode
Ni CE和简单:
let rec list_car ch = match ch with
| "" -> []
| ch -> (String.get ch 0) :: (list_car (String.sub ch 1 ((String.length ch)-1))) ;;
怎么是这样的:
let string_to_list str =
let rec loop i limit =
if i = limit then []
else (String.get str i) :: (loop (i + 1) limit)
in
loop 0 (String.length str);;
let list_to_string s =
let rec loop s n =
match s with
[] -> String.make n '?'
| car :: cdr ->
let result = loop cdr (n + 1) in
String.set result n car;
result
in
loop s 0;;
从有利的一面,这会为空字符串工作!您需要更好地处理非空字符串。由于OCaml不允许使用模式匹配来解构字符串,因此像这样的函数可能会使用索引(整数)来获取字符串中的字符。 – 2012-04-09 03:58:44
'| n - > string_to_char_list n'这是一个无限循环。永远不要用你得到的相同参数递归! – Ptival 2012-04-09 06:49:42