我正在尝试学习lean并希望定义一个替换函数,该函数使用两个元素x
和y
,并将x
的每次出现替换为{{1}在给定的列表中。
我试着像这样定义:
y
这给了我以下错误:
def replace {α : Type}: α -> α -> list α -> list α
| a b [] := []
| a b (x::xs) := (if a = x then b else x) :: replace a b xs
我的问题是我不能对类型error: failed to synthesize type class instance for
α : Type,
replace : α → α → list α → list α,
a b x : α,
xs : list α
⊢ decidable (a = x)
使用相等,所以我想我需要将α
限制为某种类型的类,其中相等是可判定的(就像我在Haskell中所做的那样)。我怎么能这样做?
我当前的解决方法是将等于函数作为参数:
α
答案 0 :(得分:3)
您可以将α的可判定等式作为类型类参数,如下所示:
def replace {α : Type} [decidable_eq α] : α -> α -> list α -> list α
| a b [] := []
| a b (x::xs) := (if a = x then b else x) :: replace a b xs
#eval replace 2 3 [2, 2, 5, 6, 3, 2]
方括号表示类型类的实例应该通过类型类解析来推断。