小编F. *_*ler的帖子

Haskell Concat-Typeclass

我想知道Haskell中是否存在已定义的类型类,它声明了连接.

对于列表,有++concat.但当然还有其他类型可以使用.

例:

type Valuater = A -> [Int]
concatValuater :: [Valuater] -> Valuater
concatValuater vs = \a -> concat [v a | v <- vs]
Run Code Online (Sandbox Code Playgroud)

是不是有类型类concat

haskell concat typeclass

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

撰写Java-8-Functional-Interface

我有一个像这样的Java-8-FunctionalInterface:

@FunctionalInterface
public interface A {
    void doIt ();
}
Run Code Online (Sandbox Code Playgroud)

Function-Interface提供的compose-方法.我想用它来减少这样的流A:

Stream<A> as;
A composed = as.reduce (() -> {}, Function::compose);
Run Code Online (Sandbox Code Playgroud)

结果我希望有一个函数A,它调用每个AStream的方法doIt.

composed.doIt (); // Executes every doIt ()
Run Code Online (Sandbox Code Playgroud)

但由于A 不是实现者Function,因此Function::compose不可能使用方法参考.我不能从Function(或Supplier)扩展,因为那时我将有两个抽象方法(我自己和来自Function).

我能做些什么来使我的功能成为可能A呢?

java functional-programming java-8 functional-interface

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

将非monadic函数绑定到monad

也许这是一个经常被问到的问题,但我没有找到答案.

monad的绑定定义如下:

(>>=)  :: m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

目前我正在这样做:

foo :: Int
foo = sum $ ((*11) . (+2)) `map` [1..4]
Run Code Online (Sandbox Code Playgroud)

我想实现这样的语法,因为我认为它更具可读性:

[1..4] >>= (+2) >>= (*11) >>= sum
Run Code Online (Sandbox Code Playgroud)

我不知道合适的运营商而不是>>=.

此外:foo是198.

monads haskell function-composition

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

有没有更快的方法来使用Java查找不同的元素

我编写了代码来查找大量字符串中的distinct元素.代码如下

HashMap<String, Integer> countMap = new HashMap<>();
String[] str={"aa","bb","cc","bb","aa","cc","aa","bb","cc","bb"};
for (String e : str) {
  if (!countMap.containsKey(e)) {
    countMap.put(e, 1);
  } 
}
Iterator it=countMap.keySet().iterator();
String[] db= new String[countMap.size()];
for(int i=0;i<countMap.size();i++){
  db[i]=(String)it.next();
  System.out.println(db[i]);
}
Run Code Online (Sandbox Code Playgroud)

有没有比这更快的代码,因为我必须处理非常大的数组.

java

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

划分两个阶乘

我对Java相对较新,但当然试图变得更好.我无法解决一个容易看起来容易解决的问题,但这里是:写一个计算n!/ k的程序!(阶乘),取n和k作为用户输入,检查n> k> 0并且如果不是则打印错误.

这是我到目前为止所拥有的.我知道我没有完成问题的错误部分,但我想让它现在正常工作.计算一个因子是非常直接的,但将两者分开似乎是一个挑战.任何帮助,将不胜感激!提前致谢!

import java.util.Scanner;

public class nkFactorial {

    @SuppressWarnings({ "resource" })
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);   
        System.out.println("Enter n");
        int n = input.nextInt();
        System.out.println("Enter k");
        int k = input.nextInt();

        long nfactorial=1;
        long kfactorial=1;

        do {
            nfactorial *=n;
            n--;
            kfactorial *=k;
            k--;
        } while (n>k && k>1);
        System.out.println("n!/k!=" + nfactorial/kfactorial );
    }
}
Run Code Online (Sandbox Code Playgroud)

java algorithm

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