我正在处理Agda中的字符串,而且我有一个它们的向量。我需要检查一个给定的字符串是否出现在一个向量中(作为检查变量是否空闲或绑定在表达式中的一部分,在PL理论中我是做什么的。)
我仍然在标准库中找到自己的方式,而且我发现我花了很多时间寻找其他语言标准库中的基本功能(哈斯克尔等)。学习语言及其概念有很多宝贵的资源,但我在Agda,公共图书馆等应用编程方面所见的并不多。
标准库中是否有Vector的隶属函数,或构建一个简单的单行,或者我是否需要自己编写函数? (显然,这样的函数将参数化为元素类型的可判定等式)
您如何在Agda中学习标准库?是否有良好的指南/教程,或类似类似工具的工具?
答案 0 :(得分:4)
标准库中是否有Vector的隶属函数,或构建一个简单的单行,或者我是否需要自己编写函数?
不是我知道的。 right notions在那里但不是搜索功能AFAICT。并且使用我在其余答案中描述的命令不会产生任何结果。
您如何在Agda中学习标准库?是否有良好的指南/教程,或类似hoogle的工具?
在emacs内部,您可以使用C-c C-z
搜索范围内的定义。您可以使用两个标识符(它将选择类型提及它们的定义)和字符串文字(它将选择标识符包含该字符串的标识符)。
因此,探索图书馆的一种方法是open import
许多模块,并在精心挑选的关键字上使用C-c C-z
。例如。在以下模块中
module Explore where
open import Data.Nat
open import Data.Nat.Divisibility
open import Data.Nat.Properties
open import Data.Nat.Properties.Simple
按键C-c C-z _*_ _+_ RET
返回:
Definitions about _*_, _+_
+-*-suc : (m n : ℕ) → m * suc n .Agda.Builtin.Equality.≡ m + m * n
/-cong : {i j : ℕ} (k : ℕ) → i + k * i ∣ j + k * j → i ∣ j
distribʳ-*-+
: (m n o : ℕ) → (n + o) * m .Agda.Builtin.Equality.≡ n * m + o * m
im≡jm+n⇒[i∸j]m≡n
: (i j m n : ℕ) →
i * m .Agda.Builtin.Equality.≡ j * m + n →
(i ∸ j) * m .Agda.Builtin.Equality.≡ n
isCommutativeSemiring
: .Algebra.Structures.IsCommutativeSemiring
.Agda.Builtin.Equality._≡_ _+_ _*_ 0 1
nonZeroDivisor-lemma
: (m q : ℕ) (r : .Data.Fin.Fin (suc m)) →
.Data.Fin.toℕ r .Relation.Binary.Core.≢ 0 →
suc m ∣ .Data.Fin.toℕ r + q * suc m → .Data.Empty.⊥