有没有一种程序设计语言带有“负”型系统?

2021-02-24 17:15

根据我的经验,我所知道的所有语言都有一种“肯定”类型的系统。我所说的“正类型系统”是指在编写源代码时,总是指定函数/对象接受的类型,比如:f函数(SomeTy

解答动态

  • FooType参数){。。。}//交集类型:参数必须同时符合SomeType和FooTypefunction foo(SomeTypelt;Not ConcreteTypeFoolt;Not TransactionTypeAlt;Not TransactionTypeBlt;Not TransactionTypeC>;t){。。。}布尔验证(TransactionTypeC t){。。。}} 没有排除类型系统的等效代码如下此:
    接口事务() { ... }类TransactionTypeA实现事务{。。。}类TransactionTypeB imnplements事务{。。。}类TransactionTypeC实现事务{。。。}intece TransactionRule(){boolean validate(Transaction t);}intece ValidationStrategy(){boolean validate(Transaction t);}intece ValidationStrategyFactory{ValidationStrategy create(Transaction t);}class RuleA实现TransactionRule{RulealidationStratetyFactory strategyFactory;构造函数(RuleAvalidationStrateyFactory f){strategyFactory=f;}布尔验证(事务t){ValidationStrategy s=策略工厂.创建(t) ;返回s.validate();}}类RuleAvalidationStrateyFactory实现ValidationStrategyFactory{ValidationStrategy create(Transaction t){if(t.type==TransactionTypeA){return new RuleATransactionTypealidationStrategy();}else{return new RuleATransactionTypeBAndCValidationStrategy();}}}类RuleATransactionTypealidationStrategy实现ValidationStrategy{布尔验证(事务t){。。。}}类RuleATransactionTypeBAndCValidationStrategy实现ValidationStrategy{布尔验证(事务t){。。。}}RuleB类实现TransactionRule{RulebValidationStrateyFactory strategyFactory;构造函数(RulebValidationStrateyFactory f){strategyFactory=f;}布尔验证(Transaction t){ValidationStrategy s=策略工厂.创建(t) ;返回s.validate();}}类rulebValidationStrateyFactory实现ValidationStrategyFactory{ValidationStrategy create(Transaction t){if(t.type==TransactionTypeA){return new RuleBTransactionTypeBValidationStrategy();}else{return new rulebtransactionTypeaaandcvalidationStrategy();}}}类RuleBTransactionTypeBValidationStrategy实现ValidationStrategy{布尔验证(事务t){。。。}}类RuleBTransactionTypeAAndCValidationStrategy实现ValidationStrategy{boolean validate(Transaction t){。。。}}类RuleC实现TransactionRule{RuleCValidationStratetyFactory strategyFactory;构造函数(RuleCValidationStratetyFactory f){strategyFactory=f;}布尔验证(Transaction t){ValidationStrategy s=策略工厂.创建(t) ;返回s.validate();}}类RuleCvalidationStrateyFactory实现ValidationStrategyFactory{ValidationStrategy create(Transaction t){if(t.type==TransactionTypeA){return new RuleCTransactionTypeCValidationStrategy();}else{return new ruleCtransactionTypeaaandbValidationStrategy();}}}类RuleCtractionTypeCvalidationStrategy实现ValidationStrategy{布尔验证(事务t){。。。}}类RuleCTransactionTypeAAndBValidationStrategy实现ValidationStrategy{布尔验证(事务t){。。。}}问题是:这种类型系统有没有编程语言?

    • 我不是逻辑学家、类型理论家或编程语言理论家,所以我的直觉在这里可能是错误的,但我认为要做到这一点实际上并不需要那么多。
      例如,人们把Java的类型系统扭曲成了相当惊人的形状。我不会惊讶地发现,你想要的东西可以用Java或类似语言编码。
      I也很肯定,这是C++模板java编程常用的。但我不是C++程序员,而P 这样的类型可以很容易地在斯卡拉编码。其中一个技巧是使用隐式。在隐式解析期间出现歧义是非法的,所以只要在两种类型相等时编写两个变得歧义的隐式。这真的很容易做到:你为[A,B]定义一个隐式的,为[A,A]定义一个隐式的。如果类型不同,那么只有第一个隐式是适用的,所有的东西都是桃色的。如果两个类型相等,则两个隐式都适用,编译失败并出现不明确的隐式错误比如:
      密封类=!=[A,B]trait LowerPriorityImplicits{/**不显式调用!*/隐式定义等于[A]:=!=[A,A]=系统错误(quot;)}对象=!=扩展LowerPriorityImplicits{/**不显式调用!*/隐式定义nequal[A,B]:=!=[A,B]=新=!=[A,B]} 这定义了一个名为的类型构造函数!=具有两个类型参数A和B,如果尝试用相同的类型调用它,则会导致编译错误。(请注意,在标准库中已经有一个名为=:=的类型构造函数,用于检查是否相等)此:
      case类Foo[A,B](A:A,B:B)(隐式e:A=!=B) 这定义了一个类型构造函数Foo,它有两个类型参数a和B,只有在a和B不存在时才能实例化相等:
      Foo(1f,1.0)Foo(quot;,1)Foo(quot;,Some(quot;)//不编译Foo(1f,1f)//不明确的隐式值://两个方法在trait LowerPriorityImplicits中相等类型[A]A=!=A//和方法nequal in object=!=类型[A,B]A=!=B//匹配所需类型Float=!=FloatFoo(quot;)//不明确的隐式值://两个方法在[A]A类型的trait LowerPriorityImplicits中相等!=A//和方法nequal in object=!=类型[A,B]A=!=B//匹配所需的类型字符串=!=string 但您也可以这样使用它方式:
      案例类NotInt[A](A:A)(隐式e:A=!=Int)NotInt(lt;type,ExcludedUnionlt;A,Tlt;T,Alt;TNotAgt;){return notN;}nonnumber(quot;);nonnumber(2);//类型为“number”的参数不能赋给类型为“never”的参数。

      • I将用一个问题回答您的问题。
        您提出了一个函数de声明:
        F功能(不是SomeType参数){。。。}我的问题是:如何实现这个函数中的任何东西?
        函数声明没有告诉我quot;能做什么。我不知道它可能有什么属性或方法。我甚至不知道quot;不能做什么。

        • 我认为有许多语言可以支持没有quot;的TransactionRule用例,只要它们有某种形式的多方法或模式匹配,其中匹配派生类型更多的方法比方法获得更高的优先级匹配派生较少的类型。例如在Raku:
          类事务{}类TransactionTypeA是事务{}类TransactionTypeB是事务{}角色事务规则{方法验证(事务-->;Bool){。。。}}cla公司

          • End

          免责声明:

          本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。