小编Rod*_*edo的帖子

如何用"或"逻辑编写switch语句?

下面,我创建了一个工作正常的简单switch语句.我想知道如何更改此代码,因此它是switch(c),然后是case 1,case 2,case 3,default.

例: if char is 'w' || char is 'W' return WHITE

我尝试了一个简单的if语句,尽管它成功编译,但它没有给我正确的输出.希望你能帮忙.谢谢!:)

static COLORS color(char c) {

    switch(toupper(c)) {

        case 'W' : return WHITE;

        case 'B' : return BLUE;

        case 'R' : return RED;

        default  : return DEFAULT;
    }
}
Run Code Online (Sandbox Code Playgroud)

c switch-statement or-operator

3
推荐指数
2
解决办法
6428
查看次数

构建对角块矩阵,将一些块作为变量CVXPY

我想在CVXPY中生成(对角线)块矩阵(最好是稀疏的).

有些块可以是eye(m)或者任何东西,但我有一个块,它是:

from cvxopt import *
import cvxpy as cvx
import numpy as np
import scipy
W = cvx.Variable(m,1)
W_diag = cvx.diag(W)
Run Code Online (Sandbox Code Playgroud)

然后我尝试用块形成块对角矩阵W_diag,例如:

T = scipy.sparse.block_diag((scipy.sparse.eye(m1).todense(), cvx.diag(W))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError:类型不支持转换:(dtype('float64'),dtype('O'))

我能做什么?其他方法?我想T稍后在CVXPY的约束中使用矩阵.

python numpy scipy cvxopt cvxpy

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

解析 C 声明

有人可以帮我弄清楚这个声明吗?

int *x()(int)
void (*signal(int, void (*fp)(int)))(int)
Run Code Online (Sandbox Code Playgroud)

我似乎无法使用此处给出的方法解析这些。我知道有什么用这种手段cdecl.org并且也是第一个1是非法的,但我想弄清楚如何分析这些?

c parsing declaration

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

Haskell中的`map`是懒惰的吗?

我一直在研究 Graham Hutton 的 Haskell 编程。它指出

该函数map将函数应用于列表的所有元素

好的,有道理。当然符合我对其他语言地图的了解。

练习之一是实施all :: (a -> Bool) -> [a] -> Bool

有时,如果不是懒惰地完成,一个幼稚的实现可能会无限循环。例如all (<10) [1..]。所以我的第一个实现是:

all p []       = True
all p (x:xs)   | not (p x) = False
               | otherwise = all' p xs
Run Code Online (Sandbox Code Playgroud)

但后来我想到了用函数组合尝试mapand看什么在Haskell非终止的程序会怎么做:

all' :: (a -> Bool) -> [a] -> Bool
all' p = and . map p
Run Code Online (Sandbox Code Playgroud)

出乎我的意料,all' (<10) [1..]很快就回来了False。我实际上希望mapand应用之前尝试创建一个无限列表- 类似于and …

haskell lazy-evaluation higher-order-functions

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

使用 CVXOPT 或 CVXPY 进行凸编程

我需要在 Python 中使用 CVXOPT 或 CVXPY 解决优化问题,但遇到了困难。目标函数是

Minimize Sum(a*x^2+b/x)
Run Code Online (Sandbox Code Playgroud)

受以下限制

5 <= x < 40;

sum(v/d)<=T
Run Code Online (Sandbox Code Playgroud)

其中向量x是优化变量,向量ab是给定的,并且T是给定的标量。

python optimization convex-optimization cvxopt cvxpy

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

如何防止lambda函数递归调用自身?

在我的代码中,我首先定义了两个lambda函数:

func1 = lambda x: x + 2
func2 = lambda x: x * 2
Run Code Online (Sandbox Code Playgroud)

后来在我的代码中,我想创建一个lambda函数,它添加上面两个lambda函数的结果,但是这个函数必须和上面的函数之一一样.也就是说,我想做这样的事情:

func2 = lambda x: func1(x) + func2(x)
Run Code Online (Sandbox Code Playgroud)

请注意,功能名称func2再次出现.

我知道这很愚蠢,还有其他方法可以达到同样的预期效果.然而,这个例子只是我试图实现的一个非常简化的版本.但是,这不起作用,因为它给我错误:

RecursionError:超出最大递归深度

我认为这是因为func2一直在呼唤自己.有没有办法防止这种情况发生?我无法更改名称func1func2(请注意,这也意味着我无法创建两个具有不同名称但内容相同的新功能).我试过这样的事

func2Copy = lambda x: func2(x)
func1Copy = lambda x: func1(x)
func2 = lambda x: func1Copy(x) + func2Copy(x)
Run Code Online (Sandbox Code Playgroud)

但看到了同样的错误(如预期的那样).我正在尝试做什么?

python lambda

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

收集总和的公分母

我有一个总和,其中每个项共享相同的分母,例如a/Z + b/Z + ...。我想把Z. 虽然simplify可以做到,但是时间太长了。我已经尝试collect过了factor,但也没有达到我想要的效果。

有 SymPy 函数可以用于此目的吗?

python symbolic-math sympy

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

如何通过Haskell中的列表理解正确生成String列表?

我需要使用列表理解来生成这样的列表:[“ AaBB”,“ AbBB”,“ AcBB”,​​“ AdBB”,“ AeBB”,“ AfBB”,“ AgBB”]。但是我一直在创建表达式来解决这个问题

我尝试创建一个列表,其中每个元素都是字符串连接,类似“ A” + x +“ BB”,其中x是从“ a”开始到“ g”结束的一系列字母中的元素

module C where
    genList :: [String]
    genList = [ "A" ++ x ++ "BB" | x <- ["a" .. "g"]] 
Run Code Online (Sandbox Code Playgroud)

因此,我期望生成一个与问题中所要求清单相似的清单。但是相反,我只是遇到了此编译错误:

Prelude> :l exC
[1 of 1] Compiling C                ( exC.hs, interpreted )

exC.hs:3:41: error:
    • No instance for (Enum [Char])
        arising from the arithmetic sequence ‘"a" .. "g"’
    • In the expression: ["a" .. "g"]
      In a stmt of a list comprehension: x …
Run Code Online (Sandbox Code Playgroud)

string haskell list char

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

如何在Haskell中编写for循环?

我真的对Haskell并不陌生,也对如何实现for循环感到困惑,因为我知道我们需要对它们使用递归。

例如,我有一个列表[1,2,2,4,1],想要编写一个将每个都更改2为的函数3。我将如何去做呢?在Java中,我知道我会写以下内容

public void replace_two(List<Integer> ints) {
        int i = 0;
        for (int x: ints) {
            if (x == 2) {
                ints.set(i, 3);
            }
            i++;
        }
        System.out.println(ints);
    }
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何用Haskell重现其他类似内容?

haskell functional-programming list

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

使用条件过滤元组列表以输出列表

我想在Haskell中使用标准的Prelude(无递归,无列表理解)来过滤元组列表,然后输出整数列表。它应检查包含整数的三元组列表,例如,

[(1,2,3), (2,3,7), (4,5,20)]
Run Code Online (Sandbox Code Playgroud)

并查看元素#1和#2的总和是否等于元素#3。如果是这样,请将元素#3放入列表中,然后输出列表。这是我正在寻找的输出:

>sumOfElements [(1,2,3), (2,3,7), (4,5,9)]
[3,9]
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

sumsOfElements :: [(Int, Int, Int)] -> [Int]
sumsOfElements list = filter (\(a,b,c) -> a+b==c) list
Run Code Online (Sandbox Code Playgroud)

这种工作,但它输出满足条件的元组列表。

>sumOfElements [(1,2,3), (2,3,7), (4,5,9)]
[(1,2,3), (4,5,9)]
Run Code Online (Sandbox Code Playgroud)

我不确定如何c从元组中提取该元素并将其附加到输出的新列表中。

haskell functional-programming tuples function filter

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