以下是自定义agda库的代码。在下面的代码中,代表向量,ℕ代表自然数。 take类型与Haskell类似。示例:“在[1,2,3]中取3 [1,2,3,4,5,6,7,8]个结果。
take : ∀{A : Set}{n : ℕ} → (m : ℕ) → A n → A m
take 0 xs = []
take (suc m) (x :: xs) = x :: take m xs
我一直收到错误:
不完整的模式匹配。遗失案件:
采取(成功 m)[]检查take的定义
我不明白,我可能错过了什么可能的证据。
答案 0 :(得分:2)
take
的类型签名表示,对于任何完全不受约束的m
,您可以返回长度为Vec
m
Vec
n
m
1}}。当然,这不是正确的,因为n
必须小于或等于Vec
,因为您要返回Vec
的前缀。由于要采用的元素数量和m
的长度彼此无关,因此Agda会为您提供有关不完整模式匹配的错误。
在Agda标准库中,Vec
小于或等于输入take : ∀ {a} {A : Set a} m {n} → Vec A (m + n) → Vec A m
长度的限制表示如下:
take : ∀ {a} {A : Set a} {m n} → m ≤ n → Vec A n → Vec A m
您还可以定义类似
的内容take : ∀ {a} {A : Set a} m {n} → Vec A n → Vec A (m ⊔ n)
甚至
Data.List.take
模拟_⊔_
的行为(其中min
表示Agda stdlib中的$textAreas = TextAreas::getAllTextAreas();
$response = Yii::$app->response;
$response->format = Response::FORMAT_JSON;
return ArrayHelper::toArray($textAreas, [
TextAreas::class => [
'id',
'width',
'height',
'content' => function ($data) {
return $data->text->text;
},
],
]);
)。
答案 1 :(得分:1)
您是@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getElementsSearch(SearchRequestObject sro) {
Session session = SessionUtil.getSession();
FullTextSession fullTextSession = Search.getFullTextSession(session);
.
.
.
}catch(Exception e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build();
}finally {
session.clear();
session.close();
}
}
上的模式匹配和m
类型的向量xs
。由于 A n
为m
,因此无法保证suc
非空。如错误所示,您还需要考虑xs
为m
且suc
为空的情况。
或者,您可以编写一个更精确类型的函数,以确保xs
至少与xs
一样长。这是标准库中使用的内容:
m