在 Lambda 微积分中,pair/vireo 访问如何工作?

问题描述

(免责声明语法:我使用 λabc.exp 而不是 λa.λb.λc.exp)

TLDR/更简单的示例:

V:= λgxf.f(ga)
GETG:= λa.a(g)

GETG V(N1 N2)

我想知道这是否有效,即。 GETG === N1

FULL(我实际上在做什么): 我做了一个小化学模型,我的目标是能够在函数中使用我的数据结构。

V:= λgxf.f(gx)
ELEMENT:= λpnetf.f(pnet)
BONDDATA:= λab.Vab
NONMetaL:= V(N0 N0)
MetaL:= V(N1 N1)

请注意,我为一对/vireo 数据制作了一个列表。

(对ELEMENT的参数有好奇的人输入如下:proton,neutron,electron,type)

现在我将定义我的绑定函数和元素:

HYDROGEN:= ELEMENT(N1 N0 N1 NONMetaL)
H-PAIR:= BONDDATA(HYDROGEN HYDROGEN)

CovalENT:= ...placeholder
IONIC:= ...placeholder

BOND:= λab.a(AND is0(t(a)) is0(t(b))) b(AND is0(t(a)) is0(t(b)))CovalENTab IONICab

BOND H-PAIR === ?

如您所见,即使您将列表/对数据结构传递给它,我也不知道是否可以从 t 访问 λa(type)。如果这不起作用,为什么?什么会?

解决方法

我意识到这是无效的,因为我只是将 a 作为参数应用。

这样做的方法是为数据结构定义我们自己的选择器。

fst:= λabcd.a snd:= λabcd.b 等等......最好我们可以使用教堂数字。

选择器:= λnabcd.EQnN1 a EQnN2 b EQnN3 c EQnN4 d

所以在我们的债券函数中: λab.AND is0(K(selectorN4a) KI(selectorN4b)) Covalentab...等等。

可能有更好的方法来做到这一点,但我现在不知道。