翻转列表 ML 中的替代元素
Flip Alternate Elements in a List ML
我已经编写了一个函数来翻转列表中的交替元素,但是我必须调用它,然后调用它的方法(我是 ML 的新手,所以如果我使用了不正确的术语,我深表歉意)。我宁愿只调用函数而不必调用其中的方法。这是我现在要做的:
(*3. Flip alternate elements in a list, if n = odd, element n remains at end*)
fun flip nil x = x
| flip x nil = x
| flip (x::xs) (y::ys) = x::y::flip xs ys;
fun take l =
if l = nil then nil
else hd l::skip (tl l)
and skip l =
if l = nil then nil
else take (tl l);
但是当我调用它来反转元素时,我必须调用它:
flip (skip d) (take d);
flip (skip e) (take e);
有什么方法可以调用该函数:
flip (d);
如果我现在调用 flip (d);
,它只会打印
val take = fn : ''a list -> ''a list
val skip = fn : ''a list -> ''a list
提前谢谢大家!
编辑:我应该提到 d 只是一个整数列表:
val d = [1,2,3,4];
假设"flipping alternate elements in a list"表示将[1,2,3,4,5,6]
变成[2,1,4,3,6,5]
,如果长度为奇数则丢弃最后一个元素,那么你可以简单地通过单个函数中的模式匹配来实现:
fun flip (x::y::xs) = y::x::flip xs
| flip _ = []
对您的代码片段的一些反馈:
- 你的很多括号都是不必要的。
- 不要使用
hd
/ tl
,而是使用模式匹配。
实际翻转发生在您的 take
和 skip
。
您的 flip
可以适当地称为 merge
。
如果是这种情况,为了修复 flip
所以它只需要一个参数:
fun flip xs = merge (skip xs) (take xs)
能够创建带有更多参数的辅助函数并调用它们是非常有用的。
我已经编写了一个函数来翻转列表中的交替元素,但是我必须调用它,然后调用它的方法(我是 ML 的新手,所以如果我使用了不正确的术语,我深表歉意)。我宁愿只调用函数而不必调用其中的方法。这是我现在要做的:
(*3. Flip alternate elements in a list, if n = odd, element n remains at end*)
fun flip nil x = x
| flip x nil = x
| flip (x::xs) (y::ys) = x::y::flip xs ys;
fun take l =
if l = nil then nil
else hd l::skip (tl l)
and skip l =
if l = nil then nil
else take (tl l);
但是当我调用它来反转元素时,我必须调用它:
flip (skip d) (take d);
flip (skip e) (take e);
有什么方法可以调用该函数:
flip (d);
如果我现在调用 flip (d);
,它只会打印
val take = fn : ''a list -> ''a list
val skip = fn : ''a list -> ''a list
提前谢谢大家!
编辑:我应该提到 d 只是一个整数列表:
val d = [1,2,3,4];
假设"flipping alternate elements in a list"表示将[1,2,3,4,5,6]
变成[2,1,4,3,6,5]
,如果长度为奇数则丢弃最后一个元素,那么你可以简单地通过单个函数中的模式匹配来实现:
fun flip (x::y::xs) = y::x::flip xs
| flip _ = []
对您的代码片段的一些反馈:
- 你的很多括号都是不必要的。
- 不要使用
hd
/tl
,而是使用模式匹配。 实际翻转发生在您的
take
和skip
。您的
flip
可以适当地称为merge
。如果是这种情况,为了修复
flip
所以它只需要一个参数:fun flip xs = merge (skip xs) (take xs)
能够创建带有更多参数的辅助函数并调用它们是非常有用的。