小编neb*_*ffa的帖子

共同依赖的默认参数

我有这样的代码:

import random

def helper():
    c = random.choice([False, True]),
    d = 1 if (c == True) else random.choice([1, 2, 3])
    return c, d

class Cubic(object):
    global coefficients_bound

    def __init__(self, a = random.choice([False, True]), 
        b = random.choice([False, True]),
        (c, d) = helper()):
        ...
        ...
Run Code Online (Sandbox Code Playgroud)

引入了helper()函数,因为我在函数本身的定义中没有共同依赖的参数 - Python抱怨它在计算d时找不到c.

我希望能够像这样创建这个类的对象,更改默认参数:

x = Cubic(c = False)
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Traceback (most recent call last):
  File "cubic.py", line 41, in <module>
    x = Cubic(c = False)
TypeError: __init__() got an unexpected keyword argument 'c'
Run Code Online (Sandbox Code Playgroud)

这可能与我写的方式有关吗?如果没有,我应该怎样做?

python

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

无法重用计算表达式中指定的变量

我正在尝试使用计算表达式来创建类似于构建器的DSL,但是当我尝试使用let assignments来帮助组合时,我得到一个编译错误,无法找到这样的赋值.这是一个例子:

type Node = 
    {
        Key: Option<string>
        Children: List<Node>
        XPathFromParent: string
    }


let defaultNode = 
    {
        Key = None; 
        Children = [];
        XPathFromParent = ".//somePath"
    }


type NodeBuilder(xpath: string) =
    member self.Yield(item: 'a): Node =  defaultNode

    member this.xpath = xpath

    [<CustomOperation("xpath_from_parent")>]
    member __.XPathFromParent (node, x) = {node with XPathFromParent = x}

    [<CustomOperation("nodes")>]
    member __.Nodes (node, x) = {node with Children = x}

    [<CustomOperation("key")>]
    member __.MidasMeasurementKey (node, x) = {node with Key = x}

    member this.Bind(x, f) = f x …
Run Code Online (Sandbox Code Playgroud)

f#

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

为什么我的范围功能打印未截断的浮动?

我做了这个范围函数,所以我可以有一个整数步以外的东西,它可以工作,但我想知道为什么浮动不被截断.

def drange(start, step):
    values = []
    r = start
    while r >= 0:
        values.append(r)
        r += step
    return values


print drange(2, -0.2)
Run Code Online (Sandbox Code Playgroud)

经过调试,我发现不是这种打印

[2, 1.8, 1.6, 1.4, 1.2, 1.0, 0.8, 0.6, 0.4, 0.2, 0]
Run Code Online (Sandbox Code Playgroud)

而是打印

[2, 1.8, 1.6, 1.4000000000000001, 1.2000000000000002, 1.0000000000000002, 0.8000
000000000003, 0.6000000000000003, 0.4000000000000003, 0.2000000000000003, 2.7755
575615628914e-16]
Run Code Online (Sandbox Code Playgroud)

大声笑,难怪我的模块不起作用.为什么会发生这种情况,我该如何解决?

python

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

未定义的函数引用 - 学习C

我正在通过将我在Python中完成的一些事情转换为C来学习C.我在来到这里之前尽可能地尝试在线查看,但似乎很难找到我正在寻找的答案.

接下来是米勒 - 拉宾测试的我(迄今为止)对一个数字的素数的翻译.

#include <stdio.h>
#include <math.h>

_Bool prime(long long n);

int main() {
    int i = 6;
    for (i; i < 9; i++) {
        if (prime(i)) {
            printf("%i\n", prime(i));
        }
    }
}

_Bool prime(long long n) {
    int s = 0;
    int r = 0;
    int a_index = 0;
    // printf("the value of a_index when initialised is: %d\n", a_index);
    // printf("the value of s when initialised is: %d\n", s);
    int *a_list;
    _Bool is_prime = 1;
    _Bool composite_part_a = …
Run Code Online (Sandbox Code Playgroud)

c

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

Haskell类型检查/模式匹配

下面的Haskell代码在最后一行抱怨,当我试图检查表达式是否符合形式为Cons _ _的东西时.Haskell的错误信息是:"表达式上下文中的模式语法:_" - 我想知道的是 - 有没有办法完成我想要做的事情?我似乎要做的是在运行时检查表达式的类型,从我读过的内容可能意味着我可以更好地编程?但是,由于我是初学者,我不知道这是不是我在做什么,特别是因为我在最后一小时试图这样做.

data Val = Num Int | Nil | Cons Val Val
    deriving (Eq, Show, Read)

interpret_expr :: Prog -> Vars -> Expr -> Val
interpret_expr _ _ (Isnum NilE) = Num 0
interpret_expr _ _ (Isnum (ConsE _ _)) = Num 0
interpret_expr _ _ (Isnum (NumE _)) = Num 1
interpret_expr prog vars (Isnum expr)
    | interpret_expr prog vars expr == Nil = Num 0
    | interpret_expr prog vars expr == Cons …
Run Code Online (Sandbox Code Playgroud)

haskell

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

Haskell中的副作用和I/O.

好的,我是Haskell IO的新手.我在Haskell函数中已经阅读了很多关于IO和副作用的内容,现在我已经在Haskell中做了我自己的一些副作用,我想知道 - 我该如何写这些东西?

我有以下功能,因此在运行其中一行代码之后,我想进行一些打印,这可以通过前几行中的注释来解释.

我很确定我需要更改函数的类型签名,也许我需要使用Maybe.也许它甚至不可能这样做,我必须完全重写它?我真的不知道 - 但我正在寻找指导.我该如何使用此功能?

interpret_statement :: Prog -> Vars -> Stmt -> Vars -- one third of the debug -d functionality goes here 
                                                    -- AFTER every assignment is executed, the interpreter should print a line specifying
                                                    -- the variable being assigned to AND its new value
interpret_statement prog vars@(Vars _ b c d) (Assign A expr) = Vars (interpret_expr prog vars expr) b c d
interpret_statement prog vars@(Vars a _ c d) (Assign B expr) = …
Run Code Online (Sandbox Code Playgroud)

haskell

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

将show显示为自定义数据类型的列表

作为一个大型项目的一部分,在Haskell为一个简单的自定义语言编写一个解释器,我试图打印一些东西来帮助我编写这个东西.

有自定义数据类型

data Prog = Prog [Func]
    deriving (Show, Read)
Run Code Online (Sandbox Code Playgroud)

当我尝试在此函数的最后一行打印此prog的实例时

interpret :: Prog -> Vars -> String -> MaybeDebug -> IO ()
interpret prog vars entry _ = do
    putStrLn "The interpreter isn't written yet.  Better get onto that!"
    putStrLn "\n\n"
    putStrLn (show prog)
    putStrLn "\n\n"
    putStrLn (show vars)
    putStrLn "\n\n"
    putStrLn (show entry)
    putStrLn "\n\n"
    putStrLn (map show [func | func <- prog, (func_name func) == entry])
Run Code Online (Sandbox Code Playgroud)

我收到错误"无法将预期类型'Char'与实际类型'String'匹配.

我一直在努力解决问题所在.当这个列表理解返回一个func列表时,为什么会提到字符?

haskell

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

看起来并不像我想象的那么简单

在Haskell中为一个单独的,简单的编程语言编写一个解释器的过程中 - 当我学习在Haskell中输入时,我发现自己在墙上撞墙.

我有两种自定义数据类型

data Expr
    = Var Var
    | NumE Int
    | NilE
    | ConsE Expr Expr
    | Plus Expr Expr
    | Minus Expr Expr
    | Times Expr Expr
    | Div Expr Expr
    | Equal Expr Expr
    | Less Expr Expr
    | Greater Expr Expr
    | Not Expr
    | Isnum Expr
    | And Expr Expr
    | Or Expr Expr
    | Head Expr
    | Tail Expr
    | Call String
    deriving (Show, Read)

data Val = Num Int | Nil | …
Run Code Online (Sandbox Code Playgroud)

haskell

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

标签 统计

haskell ×4

python ×2

c ×1

f# ×1