【发布时间】:2019-05-17 15:21:40
【问题描述】:
我正在尝试创建一个包含 lambda 函数的数据类型,该函数采用与参数相同的数据类型。
这是一个例子:
datatype id = n_1 | n_2
type_synonym entry = "(id * (entry list ⇒ nat))"
type_synonym myList = "entry list"
fun ivalue :: "myList ⇒ nat"
where
"ivalue [] = 0" |
"ivalue (x # xs) = snd x (x xs)"
fun search :: "myList ⇒ id ⇒ myList"
where
"search [] t = []" |
"search (x # xs) t = (if fst x = t then (x # xs) else search xs t)"
definition my_list :: "myList"
where
"my_list = [(n_1, %p.(42::nat)),
(n_2, %p.(ivalue (search p n_1)) + 6)]"
代码的想法是拥有带有 ID 和表达式的元组列表。该表达式由一个 lambda 函数实现,该函数本身可以获取相同格式的列表。 search 和 ivalue 函数允许引用表达式中的其他条目。计算my_list 中所有表达式的算法的预期结果是[(n_1, 42), (n_2, 48)]。
entry 的定义显然是错误的,但希望能说明我试图实现的目标。有没有办法创建这样的数据类型?
【问题讨论】: