我对列表理解有一点认识.我理解的表达方式:
[x * x | x <- [1..10]]
should output [1,4,9,16,25,36,49,64,81,100]
Run Code Online (Sandbox Code Playgroud)
并且该表达式的效果与以下内容相同:
map power [1..10]
power x = x * x
Run Code Online (Sandbox Code Playgroud)
现在,我必须找到以下函数的其他方法(就像上面这样):
[(x,y+z) | x <- [1..10], y <- [1..x], z <- [1..y]]
Run Code Online (Sandbox Code Playgroud)
我无法自己弄清楚没有错误,请帮助我
haskell list-comprehension translate higher-order-functions map-function
compress xs@(_:_:_) = (ifte <$> ((==) <$> head <*> head.tail) <$> ((compress.).(:) <$> head <*> tail.tail) <*> ((:) <$> head <*> compress.tail) ) xs
导致类型错误,但我不明白为什么.它应该相当于
compress xs@(_:_:_) = (ifte (((==) <$> head <*> head.tail) xs) (((compress.).(:) <$> head <*> tail.tail) xs) (((:) <$> head <*> compress.tail) xs))
,没有.
注意:ifte = (\ x y z -> if x then y else z),<$>并<*>从Control.Applicative.
编辑:错误是:
Couldn't match expected type `[a]' with actual type `[a] …Run Code Online (Sandbox Code Playgroud) 我正在编写这个Java程序,它找到给定范围之间的所有素数.因为我正在处理非常大的数字,我的代码似乎不够快,并给我一个时间错误.这是我的代码,有谁知道让它更快?谢谢.
import java.util.*;
public class primes2
{
private static Scanner streamReader = new Scanner(System.in);
public static void main(String[] args)
{
int xrange = streamReader.nextInt();
int zrange = streamReader.nextInt();
for (int checks = xrange; checks <= zrange; checks++)
{
boolean[] checkForPrime = Primes(1000000);
if (checkForPrime[checks])
{
System.out.println(checks);
}
}
}
public static boolean[] Primes(int n)
{
boolean[] isPrime = new boolean[n + 1];
if (n >= 2)
isPrime[2] = true;
for (int i = 3; i <= n; i += 2) …Run Code Online (Sandbox Code Playgroud) 如何编写一个程序来查找给定数字后的n个素数?例如,在100之后的前10个素数,或在1000之后的前25个素数.编辑:下面是我尝试的.我正在以这种方式获得输出,但是我们可以在不使用任何素性测试函数的情况下进行输出吗?
#include<stdio.h>
#include<conio.h>
int isprime(int);
main()
{
int count=0,i;
for(i=100;1<2;i++)
{
if(isprime(i))
{
printf("%d\n",i);
count++;
if(count==5)
break;
}
}
getch();
}
int isprime(int i)
{
int c=0,n;
for(n=1;n<=i/2;n++)
{
if(i%n==0)
c++;
}
if(c==1)
return 1;
else
return 0;
}
Run Code Online (Sandbox Code Playgroud) for( a=1; a <= 25; a++){
num1 = m[a];
for( b=1; b <= 25; b++){
num2 = m[b];
for( c=1; c <= 25; c++){
num3 = m[c];
for( d=1; d <= 25; d++){
num4 = m[d];
for( e=1; e <= 25; e++){
num5 = m[e];
for( f=1; f <= 25; f++){
num6 = m[f];
for( g=1; g <= 25; g++){
num7 = m[g];
for( h=1; h <= 25; h++){
num8 = m[h];
for( i=1; i <= 25; i++){
num = …Run Code Online (Sandbox Code Playgroud) 它必须只有函数,变量,循环等(基本的东西).从目前为止我学到的东西(从应该能够做到)开始,我无法从头开始编写代码.让我真的很生气:/.如果你能一步一步地给我,以确保我明白我真的很感激.先谢谢了一大堆.
如何使用比这个更简单的代码获得相同的结果:
var primes=4;
for (var counter = 2; counter <= 100; counter = counter + 1)
{
var isPrime = 0;
if(isPrime === 0){
if(counter === 2){console.log(counter);}
else if(counter === 3){console.log(counter);}
else if(counter === 5){console.log(counter);}
else if(counter === 7){console.log(counter);}
else if(counter % 2 === 0){isPrime=0;}
else if(counter % 3 === 0){isPrime=0;}
else if(counter % 5 === 0){isPrime=0;}
else if(counter % 7 === 0){isPrime=0;}
else {
console.log(counter);
primes = primes + 1;
}
}
}
console.log("Counted: "+primes+" primes");
Run Code Online (Sandbox Code Playgroud) 我正在尝试输出前 100 个素数并不断收到错误消息:
应用程序:不是程序;期望一个可以应用于给定参数的过程:(#) arguments...:[none]
错误显示在我的 take$ 程序中:
(if (or (= m 0) (null? st))
'()
(cons (car st) (take$ (- m 1) ((cdr st)))))))
Run Code Online (Sandbox Code Playgroud)
这是我所有的代码:
(define int-builder$
(lambda (x)
(list x (lambda () (int-builder$ (+ 1 x ))))))
(define take$
(lambda (m st)
(if (or (= m 0) (null? st))
'()
(cons (car st) (take$ (- m 1) ((cdr st)))))))
(define filter-out-mults$
(lambda (num st)
(cond
(( = (remainder (car st) num) 0)
(filter-out-mults$ num ((cadr st))))
(else
(list …Run Code Online (Sandbox Code Playgroud) scheme primes sieve lazy-sequences non-procedure-application
我试图写一个递归代码,x^y但问题是如何更新代码它给我一个错误.
代码:
(defun power(x y) (if(> y 0) (* x (power(x (- y 1)))) (1)))
Run Code Online (Sandbox Code Playgroud)
错误:
CL-USER 11 : 5 >Power 2 3
Error: Undefined operator X in form (X (- Y 1)).
Run Code Online (Sandbox Code Playgroud)
错误:
CL-USER 11 : 5 >power(2 3)
Illegal argument in functor position: 2 in (2 3).
Run Code Online (Sandbox Code Playgroud) 在lisp中我有一点问题需要理解
我有这个代码:
(defun iota-b (n)
(do ((x 0 (+1 x))
(u '() (cons x u)))
((> x n) (nreverse u))))
Run Code Online (Sandbox Code Playgroud)
(iota-b 5)
(0 1 2 3 4 5)
在文档中,"do"基本模板是:
(do (variable-definitions*)
(end-test-form result-form*)
statement*)
Run Code Online (Sandbox Code Playgroud)
我真的不明白我的身体在我的身体中的位置iota-b对我而言
(你'()(cons xu)))
显然不是,为什么我们把(u'()(cons xu)))放在变量定义中?
这是一个Haskell代码示例.
indentBrackets (c:rest) level
| c=='(' = "\n" ++ (replicate level ' ') ++ [c]
++ (indentBrackets rest (level+1))
| c==')' = [c] ++ (indentBrackets rest (level-1))
| c=='[' = "\n" ++ (replicate level ' ') ++ [c]
++ (indentBrackets rest (level+1))
| c==']' = [c] ++ (indentBrackets rest (level-1))
| otherwise = [c] ++ (indentBrackets rest (level ))
indentBrackets [] _ = ""
Run Code Online (Sandbox Code Playgroud)
如果我换otherwise = [c] ++ (indentBrackets rest (level))了otherwise = [c] ++ $ indentBrackets rest …
primes ×5
haskell ×3
lisp ×2
c ×1
c++ ×1
common-lisp ×1
debugging ×1
do-loops ×1
java ×1
javascript ×1
map-function ×1
pointfree ×1
scheme ×1
sieve ×1
syntax ×1
syntax-error ×1
translate ×1
typechecking ×1
types ×1