小编Wil*_*ess的帖子

如何在haskell中使用map,concat替换3参数列表理解

我对列表理解有一点认识.我理解的表达方式:

[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

0
推荐指数
2
解决办法
574
查看次数

为什么不这个类型检查呢?

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)

debugging haskell types typechecking pointfree

0
推荐指数
2
解决办法
202
查看次数

找到给定范围内的所有素数

我正在编写这个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)

java primes sieve-of-eratosthenes

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

找到给定素数后的n个素数,而不使用任何检查素数的函数

如何编写一个程序来查找给定数字后的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)

c primes sieve-of-eratosthenes

0
推荐指数
2
解决办法
4050
查看次数

优化嵌套循环

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)

c++ primes

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

使用比此更简单的代码将素数从2计数到100

它必须只有函数,变量,循环等(基本的东西).从目前为止我学到的东西(从应该能够做到)开始,我无法从头开始编写代码.让我真的很生气:/.如果你能一步一步地给我,以确保我明白我真的很感激.先谢谢了一大堆.

如何使用比这个更简单的代码获得相同的结果:

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)

javascript primes

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

生成素数时“应用程序:不是程序”

我正在尝试输出前 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

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

Lisp函数调用语法

我试图写一个递归代码,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 syntax-error user-defined-functions

0
推荐指数
2
解决办法
9299
查看次数

理解Common Lisp做语法

在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)))放在变量定义中?

lisp syntax common-lisp do-loops

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

$并不总是在Haskell中工作

这是一个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 …

haskell

0
推荐指数
2
解决办法
188
查看次数