小编Lan*_*ana的帖子

联合类型实际上存在于python中吗?

由于python是动态类型的,当然我们可以这样做:

def f(x):
    return 2 if x else "s"
Run Code Online (Sandbox Code Playgroud)

但实际上是否打算使用python的方式?或换句话说,联盟类型是否存在于他们在球拍中的意义上?或者我们只使用它们:

def f(x):
    if x:
        return "x"
Run Code Online (Sandbox Code Playgroud)

我们需要的唯一"联盟"是什么?

python types dynamic-typing unions

11
推荐指数
5
解决办法
1万
查看次数

如何在Haskell中编写定点函数

我有一个带有以下签名的函数:

simCon :: [Constraint] -> Maybe [Constraint]
Run Code Online (Sandbox Code Playgroud)

我想编写一个方法,以防simCon返回Just [Constraint],我想将它们反馈回simCon并重新运行该方法,并继续这样做,直到输入与输出相同为止。

如果什么都没有,我想终止算法。

如果输入和输出都是相同的类型,我有一些可以工作的东西

fixed :: Eq a => (a -> a) -> a -> a
fixed f a 
  | a == a' = a
  | otherwise = fixed f a'
  where a' = f a
Run Code Online (Sandbox Code Playgroud)

但这是行不通的,因为我现在返回Maybe。有人可以建议一种方法来编写类似的函数,但要返回Maybe吗?

haskell functional-programming fixed-point-iteration

6
推荐指数
1
解决办法
113
查看次数

给定路径来计算python文件功能数量的好方法

我不想导入我的模块。我必须计算给定的.py文件路径的功能数量。最好的方法是什么?

我考虑过的一件事是计算代码中的“ def”数,但这似乎并不是解决此问题的最佳方法。有没有更好的方法来计算功能数量?

python parsing

5
推荐指数
0
解决办法
1487
查看次数

使用Data.Comp.Unification在Haskell中查找最通用的统一器(初学者问题)

我在haskell中具有以下结构,该结构实现了一些用于打印的机制并调用了统一器。我从main收到以下错误:

0 =/= int
Run Code Online (Sandbox Code Playgroud)

似乎认为0是数字而不是变量。以下是完整的实现。

 data CType 
      = CVar Int 
      | CArr CType CType
      | CInt
      | CBool
      deriving (Eq, Data)

data Constraint 
  = Equality CType CType
    deriving (Eq, Data)
Run Code Online (Sandbox Code Playgroud)

我有一些基本类型(int和bool),箭头类型和类型变量。然后,我运行一些生成相等约束的算法,这些约束以上述方式表示。

我的目标是给定约束列表,我想找到最通用的统一器。

我遇到了这个库:http : //hackage.haskell.org/package/compdata-0.1/docs/Data-Comp-Unification.html

由于我是Haskell的新手,所以我无法立即弄清楚是否可以直接应用它。我可以使用该库还是建议从头开始编写统一器?

更新

我目前正在对代码进行以下更改,但方程式出现统一错误

f =克

module SolveEq where
import Data.Data
import Data.Void
import Data.List as List
import Data.Map as Map
import Data.Set as Set
import Data.Maybe (fromJust)
import Data.Maybe (isJust)
import Control.Monad
import TypeCheck
import Data.Comp.Variables
import Data.Comp.Unification
import Data.Comp.Term
import Data.Comp.Derive
import Constraint …
Run Code Online (Sandbox Code Playgroud)

haskell type-theory type-inference lambda-calculus unification

5
推荐指数
0
解决办法
96
查看次数

保存程序生成的所有随机数,然后在球拍中重复使用它们

我有一个项目调用随机数,例如:

我的调用看起来像这样:(random)生成0到1之间的数字,也可以这样调用:(random n),生成范围内的数字.

我想要做的是将整个程序中生成的所有随机数放在一个文件中.

我有这个代码:

  (require (rename-in racket [random random0]))

  (define random-port (open-output-file "random-numbers.rktl" #:exists 'replace))
  (define (random x)
    (define y (random0 x))
    (displayln y random-port)
    y)
Run Code Online (Sandbox Code Playgroud)

但这不适用于just(random),而是适用于(random n).反正有没有让它适用于两者?

其次,如果我有多个模块使用,我可以在哪里放这个代码random

最后,出于某种原因,当我写这样的东西时:

  (for ([i (in-range 100000)]) (random 10))
Run Code Online (Sandbox Code Playgroud)

数字在文件中显示没有问题,

但是当我这样写:(random 10)我会得到一个空文件.

任何帮助将非常感激.谢谢!

random input racket

3
推荐指数
1
解决办法
78
查看次数

如何从球拍中的文件导入功能?

我确定这是一个非常基本的问题,但我有两个文件,我想从该文件导入一个函数到另一个.有办法吗?

racket

1
推荐指数
1
解决办法
612
查看次数

由于使用“打印”而导致类型不明确的类型变量“ a0”

我具有以下数据结构,并且正在尝试为其编写打印机:

data CTypeF a 
    = CVarF Int 
    | CArrF a a
    | CIntF
    | CBoolF
    deriving (Eq, Data, Show, Functor, Foldable, Traversable)  
Run Code Online (Sandbox Code Playgroud)

以下给我一个错误:

my_test = do
    let c0 = CIntF
    (print CIntF)
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

• Ambiguous type variable ‘a0’ arising from a use of ‘print’
      prevents the constraint ‘(Show a0)’ from being solved.
      Probable fix: use a type annotation to specify what ‘a0’ should be.
      These potential instances exist:
        instance Show Constr -- Defined in ‘Data.Data’
        instance Show ConstrRep -- Defined …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming

1
推荐指数
1
解决办法
63
查看次数

在Haskell中对我的数据子集进行模式匹配

假设我有一个结构:

data MyType 
  = CV Int 
  | CA MyType MyType
  | CI
  | CD
  | CB
Run Code Online (Sandbox Code Playgroud)

我有一个期望MyType的函数,我只想匹配以下语法子集:

data MyTypeNoCV 
  = CA MyType MyType
  | CI
  | CD
  | CB
Run Code Online (Sandbox Code Playgroud)

我知道这在Haskell中是不可能的。有没有一种方法可以对结构进行参数化以某种方式标记节点?

Data.Void可能有帮助吗?

haskell pattern-matching

0
推荐指数
1
解决办法
163
查看次数

在 Haskell 中结合 double for 循环的结果

我正在尝试编写一个函数,该函数生成一个列表列表,然后将一个函数应用于每个列表并将结果组合到一个大列表中。但是,我遇到了一个错误,如果有人能指出我正确的方向,我将不胜感激。

目前的代码如下所示:

solve_all :: [Constraint] -> Sol -> Sol -> CType -> [(Maybe Typing)]
solve_all c lam_env app_env t2= do 
  lst <- (simMatch c)
  forM lst $ \d -> do
    return $ case pleaseUnify d of  --ERROR HERE
      Right u -> Just substituteTyping u (lam_env .+. app_env, t2)
      Left _ -> Nothing
Run Code Online (Sandbox Code Playgroud)

在哪里:

simMatch :: [Constraint] -> [[Constraint]]

pleaseUnify :: [Constraint] -> Either String Unifcation

substituteTyping :: Unifcation -> Typing -> Typing

错误指向调用pleaseUnify d说我只传递了一个约束而不是一个列表

   • Couldn't match expected …
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
1
解决办法
84
查看次数