我正在解决Haskell中的一些经典问题以开发我的功能技能,我在实现这个"Programming Praxis"网站上建议的优化时遇到了问题:
我有三个解决这个问题的方法,第三个解决方案与第二个解决方案相比太慢.有人可以对我的代码提出一些改进吗?
我的实现是:
-- primeira implementação
primes n
| n < 2 = []
| n == 2 = [2]
| n `mod` 2 == 0 = primes'
| otherwise = if (find (\x -> n `mod` x == 0) primes') == Nothing then
n:primes'
else
primes'
where primes' = primes (n - 1)
-- segunda implementação
primes' :: Integer -> [Integer]
primes' n = sieve $ 2 : [3,5..n]
where sieve :: [Integer] -> [Integer]
sieve …Run Code Online (Sandbox Code Playgroud) 很抱歉再次打开这个话题,但是考虑这个话题本身已经开始给我一个未定义的行为.想要进入定义明确的行为区域.
特定
int i = 0;
int v[10];
i = ++i; //Expr1
i = i++; //Expr2
++ ++i; //Expr3
i = v[i++]; //Expr4
Run Code Online (Sandbox Code Playgroud)
我认为上面的表达式(按此顺序)为
operator=(i, operator++(i)) ; //Expr1 equivalent
operator=(i, operator++(i, 0)) ; //Expr2 equivalent
operator++(operator++(i)) ; //Expr3 equivalent
operator=(i, operator[](operator++(i, 0)); //Expr4 equivalent
Run Code Online (Sandbox Code Playgroud)
现在来到这里的行为是来自C++ 0x的重要引用.
$ 1.9/12-"表达式(或子表达式)的评估通常包括值计算(包括确定用于左值评估的对象的身份以及获取先前分配给对象以进行右值评估的值)和启动副作用".
$ 1.9/15-"如果标量对象的副作用相对于同一标量对象的另一个副作用或使用相同标量对象的值计算的值没有排序,则行为未定义."
[注意:与不同参数表达式相关的值计算和副作用未被排序. - 尾注]
$ 3.9/9-"算术类型(3.9.1),枚举类型,指针类型,指向成员类型的指针(3.9.2),std :: nullptr_t和这些类型的cv限定版本(3.9.3)统称为标量类型."
在Expr1中,对表达式i(第一个参数)的评估在对评估operator++(i)(具有副作用)方面没有考虑.
因此,Expr1具有未定义的行为.
在Expr2中,对表达式i(第一个参数)的评估在对评估operator++(i, 0)(具有副作用)的评估方面没有考虑.
因此,Expr2具有未定义的行为.
在Expr3中,在调用operator++(i)外部之前,必须完成对单个参数的评估operator++.
因此,Expr3具有良好定义的行为. …
我正在玩python并且能够得到两个列表的交集:
result = set(a).intersection(b)
Run Code Online (Sandbox Code Playgroud)
现在,如果d是包含a和b第三个元素的列表c,是否有内置函数用于查找内部所有三个列表的交集d?所以,例如,
d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
Run Code Online (Sandbox Code Playgroud)
那么结果应该是
[3,4]
Run Code Online (Sandbox Code Playgroud) 让我们说我有这个课程:
package{
import flash.display.Sprite;
public class Main extends Sprite{
public function Main(){
trace(getAverage(1,2,3));
trace(getAverage(1,2,3,4));
trace(getAverage(1,2,3,4,5));
}
public function getAverage (...numbers) {
var total = 0;
for (var i = 0; i < numbers.length; i++) {
total += numbers [i];
}
return total / numbers.length;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我如何实现这个"相反"?也就是说,我怎么能用动态数量的参与者来调用'getAverage'?
例如,如果我想做一些喜欢的事情:
var r:int=Math.random()*6;
var a:Array=new Array();
for (i:int=0;i<r;i++) {
a[i]=Math.random()*22;
}
// Now I have 'r' Number Of Parameters Stored In 'a'
// How Do I Call getAverage, with all …Run Code Online (Sandbox Code Playgroud) 我在下面的代码中得到了"无法从'int'转换为'TValue'".我怎样才能解决这个问题?我理解为什么会出现问题,但我想知道最好的方法.我是否需要决定特定类型的ReturnValuesDict,而不是让它通用?
public class ReturnValuesDict<TKey, TValue> : CloneableDictionary<TKey, TValue>
{
public static ReturnValuesDict<TKey, TValue> CreateEmptyClone(ReturnValuesDict<TKey, TValue> current)
{
var newItem = new ReturnValuesDict<TKey, TValue>();
foreach (var curr in current)
{
newItem.Add(curr.Key, 0); // ERROR on the 2nd parameter here
}
return newItem;
}
}
Run Code Online (Sandbox Code Playgroud) 这里是一段代码,应该循环遍历,直到用户输入0到15之间的数字
int input;
do
{
printf("Enter a number => ");
scanf("%d",&input);
printf("\n %d \n",input);
}
while (!(input>0 && input <15));
Run Code Online (Sandbox Code Playgroud)
但是,如果用户输入类似"gfggdf"的内容,则会导致循环重复一遍又一遍,并且从不提示用户再次输入...控制台看起来像这样
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
(looping indefinitely)
Run Code Online (Sandbox Code Playgroud)
看完这本书之后,似乎我需要做这样的事情来防止这种情况发生.
int input, error, status;
char skip_ch;
do
{
error = 0;
printf("Enter a number => ");
status = scanf("%d",&input);
printf("\n %d \n",input);
if(status!=1)
{
error=1;
} …Run Code Online (Sandbox Code Playgroud) 我正在使用C#.NET发送电子邮件,我正在使用它System.Net.Mail.MailMessage.我想将电子邮件主题的一部分加粗.有什么办法吗?
我想用服务器数据更新客户端数据,反之亦然.目前我使用的是BasicHttpBinding,它比wsHttpBinding更快.我的要求是要实现:
在这种情况下,两个绑定适用于BasicHttpBinding和wsHttpBinding.我应该使用哪种绑定?和BasicHttp和wsHttp绑定有什么区别?
我有这个程序:
PROCEDURE P_LOAD_EXPIRED_ACCOUNT
(
pDayDiff IN NUMBER,
ExpiredCur OUT MEGAGREEN_CUR
)
IS
BEGIN
OPEN ExpiredCur FOR
SELECT
ACCOUNT_NAME, SERVICE_TYPE,
CASE
WHEN SERVICE_TYPE = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3)
WHEN SERVICE_TYPE = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6)
WHEN SERVICE_TYPE = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12)
END
AS EXPIRED_DATE
FROM SUBSCRIBERS
WHERE (EXPIRED_DATE - CURRENT_DATE) < pDayDiff;
END;
Run Code Online (Sandbox Code Playgroud)
但SQL Developer会生成此错误:
错误(20,10):PL/SQL:ORA-00904:"EXPIRED_DATE":标识符无效
我相信PLSQL允许我在Where子句中使用Alias,但有什么我忘了吗?
提前致谢.
有没有办法在生产环境中看到所有生成的查询,就像你在开发中一样?