小编Wil*_*ess的帖子

组成功能组合:(.).(.)如何工作?

(.)采用两个函数,它们接受一个值并返回一个值:

(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

既然(.)两个参数,我觉得(.).(.)应该是无效的,但它完全没问题:

(.).(.) :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我意识到这个问题措辞严厉......所有的功能都只是因为讨论而采取了一个论点.也许更好的方式来说它是类型不匹配.

haskell currying pointfree

25
推荐指数
4
解决办法
1934
查看次数

删除列表的中间元素

我想编写一个 Prolog 程序,将奇数列表中的中间元素删除到另一个列表中。

For example, If we give : delete_mid([1,2,3,4,5],L) then it will produce : L = [1,2,4,5] as answer.

list prolog

25
推荐指数
3
解决办法
987
查看次数

在Haskell中合并两个列表

无法弄清楚如何在Haskell 中以下列方式合并两个列表:

INPUT:  [1,2,3,4,5] [11,12,13,14]

OUTPUT: [1,11,2,12,3,13,4,14,5]
Run Code Online (Sandbox Code Playgroud)

merge haskell functional-programming list interleave

24
推荐指数
4
解决办法
5万
查看次数

是什么导致"无可辩驳的模式因模式而失败",这是什么意思?

是什么

无可辩驳的模式因模式而失败

意思?什么情况会导致此运行时错误?

haskell runtime-error pattern-matching

24
推荐指数
3
解决办法
9308
查看次数

Prolog中的懒惰列表?

是否可以在Prolog中使用惰性列表?类似于以下内容:

ones([1 | Y]) :- ones(Y).
Run Code Online (Sandbox Code Playgroud)

虽然这显然不起作用.

list stream prolog lazy-evaluation lazy-sequences

24
推荐指数
3
解决办法
2647
查看次数

求表达式的第K个最小数(2 ^ x)*(3 ^ y)*(5 ^ z)

在表达中

2 x*3 y*5 z

x,y并且z可以采取非负整数值(> = 0).

因此该函数将生成一系列数字 1,2,3,4,5,6,8,9,10,12,15,16....

  • 我有一个强力解决方案.
  • 我基本上会在从1开始的循环中迭代,并且在每次迭代中我会发现当前的数字因子是否仅来自2,3或5的集合.

我想要的是一个优雅的算法.

这是一个面试问题.

java algorithm hamming-numbers

23
推荐指数
4
解决办法
5005
查看次数

"评估"功能

这里是评估文档的摘录:(参见http://hackage.haskell.org/packages/archive/base/4.5.0.0/doc/html/Control-Exception-Base.html#v:evaluate)

Control.Exception.Base.evaluate :: a -> IO a
Run Code Online (Sandbox Code Playgroud)

是不一样的

evaluate x
Run Code Online (Sandbox Code Playgroud)

一个正确的定义是

return $! x
Run Code Online (Sandbox Code Playgroud)

我不明白这两个定义之间的语义差异......是否有人可以帮助我?提前致谢!

io monads evaluation haskell io-monad

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

Java 8 Stream,获得头尾

Java 8引入了一个类似Scala的StreamStream类,这是一个功能强大的惰性结构,使用它可以非常简洁地执行这样的操作:

def from(n: Int): Stream[Int] = n #:: from(n+1)

def sieve(s: Stream[Int]): Stream[Int] = {
  s.head #:: sieve(s.tail filter (_ % s.head != 0))
}

val primes = sieve(from(2))

primes takeWhile(_ < 1000) print  // prints all primes less than 1000
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能在Java 8中这样做,所以我写了这样的东西:

IntStream from(int n) {
    return IntStream.iterate(n, m -> m + 1);
}

IntStream sieve(IntStream s) {
    int head = s.findFirst().getAsInt();
    return IntStream.concat(IntStream.of(head), sieve(s.skip(1).filter(n -> n % head != 0)));
}

IntStream primes …
Run Code Online (Sandbox Code Playgroud)

java scala sieve java-8 java-stream

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

Scala中无点样式的情况

对于这里的FP认知来说,这看起来真的很明显,但Scala中的点自由风格有什么用呢?在这个主题上真正卖给我的是一个插图,它显示了点自由风格在某些方面(例如性能,优雅,可扩展性,可维护性)如何在非点自由风格中解决相同问题的代码.

functional-programming scala pointfree

22
推荐指数
2
解决办法
2506
查看次数

将文字分配给 GHC 中的术语

出于好奇,为什么下面的程序

1 = 0

"hello" = "world"
Run Code Online (Sandbox Code Playgroud)

由 GHC 有效和编译?这仅仅是一个错误还是一个功能?谢谢!

binding haskell literals variable-assignment ghc

22
推荐指数
2
解决办法
421
查看次数