【发布时间】:2013-03-18 10:39:17
【问题描述】:
我试图在 haskell 中交换列表的第一个和最后一个元素。我已经尝试过模式匹配、表达式、函数等。这是我最后一次尝试:
cambio xs = [ cabeza++([x]++cola)|x<-xs, cabeza <- init x, cola <- last x, drop 1 x, drop 0 ([init x])]
我的编译器抛出下一个错误:
Couldn't match expected type `Bool' with actual type `[a0]'
In the return type of a call of `drop'
In the expression: drop 1 x
In a stmt of a list comprehension: drop 1 x
谁能帮帮我?我已经尝试这样做了 2 天
【问题讨论】:
-
我需要自己实现,“reverse”会反转整个列表,而不仅仅是第一个和最后一个
-
是的,reverse 所做的不仅仅是交换第一个和最后一个元素,但由于没有指定列表的其余部分必须保持原样,因此它算作一种解决方案。您不能声称 reverse 不会交换列表的第一个和最后一个元素,对吗?
-
swap (x:xs) = concat [[last xs], init xs, [x]]类似的东西? -
A list comprehension 具有这种形式:
[output-function|variable<-input-set,predicate]。您似乎拥有列表函数drop 1 x,其中只允许使用谓词(正如编译器所说,布尔函数)。 -
@DarthFennec 我想知道
a : b ++ [c]是否会比concat更常见,但我认为您的concat不需要我们加括号或记住优先表是一个优势。跨度>