我需要有关F#上的字符串连接的帮助。
给定一个整数n并列出l,我必须删除l中所有出现的n。例如:
remove 1 (L(1, L(2, L(3, E)))) should give me L(2, L(3, E))
我的代码:
type ilist = E | L of int * ilist
let rec remove n l =
match l with
| E -> []
| L(h,E) -> if (h=n) then remove h (L(h,E))
else [h, E]
| L(h,t) -> if (h=n) then remove h t
else [h :: (remove n t)]
我收到一个类型错误,说最后一行应该是类型
int * ilist
但是这里有类型
'列表
任何帮助将不胜感激!谢谢
答案 0 :(得分:3)
主要问题是一个常见问题。您将结果包装在[]
中,而忘记了h :: remove n t
已经是一个列表。所以我的固定版本:
let rec remove n l =
match l with
| E -> []
| L(h,t) -> if (h = n) then remove n t
else h :: (remove n t)
请注意,您可以摆脱中间情况,因为可以通过将t
与E
匹配来很好地解决此问题。
我还将您的remove h
更改为remove n
;即使可以保证它们相等,但我认为n
会更好
是递归函数的“常量”参数。