如何在Oz编程语言中使用AND

时间:2015-09-23 03:36:52

标签: lambda-calculus oz

declare
fun {Beta E}
    case E
    of lambda(X [Y Z]) andthen {IsAtom Y}  then Z
    else nil 
     end
    end

{Browse {Beta lambda(y [y a])   }}

我正在尝试为lambda演算制作一个beta缩减器,但我不知道如何为我刚刚开始使用的Oz附加参数。

我想做的是: IsAtom Y和if(X == Y)然后是Z

我已经尝试了“and,&&,&,然后”,但没有真正有效。 Oz文档让我很头疼。

2 个答案:

答案 0 :(得分:1)

在Oz中,t = (('BCG', 'OPV 0', 'Hep-B 1'), ('DTwP 1', 'IPV 1', 'Hep-B 2', 'Hib 1', 'Rotavirus 1', 'PCV 1'), ('DTwP 2', 'IPV 2', 'Hib 2', 'Rotavirus 2', 'PCV 2'), ('DTwP 3', 'IPV 3', 'Hib 3', 'Rotavirus 3', 'PCV 3'), ('OPV 1', 'Hep-B 3'), ('OPV 2', 'MMR-1'), ('Typhoid', 'Conjugate Vaccine'), 'Hep-A 1', ('MMR 2', 'Varicella 1', 'PCV booster'), ('DTwP B1/DTaP B1', 'IPV B1, Hib B1'), 'Hep-A 2', 'Typhoid booster', ('DTwP B2/DTaP B2', 'OPV 3', 'Varicella 2', 'Typhoid booster'), ('Tdap/Td', 'HPV')) sum(map(lambda x:len(x),t)) 是一个函数,而不是运算符。所以要做一个和操作,你会做类似的事情

And

将产生{And true false}

Here是一本很好的参考手册。

答案 1 :(得分:1)

记住'然后'是语句语法中的分隔符,'然后是'并且' orelse'是布尔(短路)运算符

CASESTATEMENT:

PATTERN的值为VALUE,然后是STATEMENT

IFSTATEMENT:

如果BOOLEXP然后是STATEMENT

BOOLEXP: BOOLEXP然后BOOLEXP orelse BOOLEXP