我有这样的代码:
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)
这可能与我写的方式有关吗?如果没有,我应该怎样做?
我正在尝试使用计算表达式来创建类似于构建器的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) 我做了这个范围函数,所以我可以有一个整数步以外的东西,它可以工作,但我想知道为什么浮动不被截断.
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中完成的一些事情转换为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) 下面的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 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为一个简单的自定义语言编写一个解释器,我试图打印一些东西来帮助我编写这个东西.
有自定义数据类型
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中为一个单独的,简单的编程语言编写一个解释器的过程中 - 当我学习在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)