Tag: currying

Haskell函数的应用和currying

我总是对学习新的语言感兴趣,这个事实让我感到脚踏实地,让我(我相信)成为一个更好的程序员。 我试图征服Haskell来来去去 – 曾经两次 – 我决定是时候再试一次。 第三次的魅力吧? 不。 我重读了我的旧笔记,并感到失望:-( 上次让我失去信心的问题很简单:整数的排列。 即从整数列表到列表列表 – 它们的排列列表: [int] -> [[int]] 这实际上是一个通用的问题,所以用'a'取代'int'仍然适用。 从我的笔记: 我自己编码,我成功了。 欢呼! 我把我的解决scheme发给我的一个好朋友 – 哈斯克尔大师,通常有助于向大师学习 – 他告诉我,这是我所知道的,“expression了语言的真正力量,使用通用设施来编码需要”。 所有这一切,我最近喝了这个苦工,走吧: permute :: [a] -> [[a]] permute = foldr (concatMap.ins) [[]] where ins x [] = [[x]] ins x (y:ys) = (x:y:ys):[ y:res | res <- ins x ys] 嗯。 […]

在Java 8中,带有2个箭头的lambda是什么意思?

我已经阅读过几个Java 8教程。 现在我遇到了以下主题: java是否支持Currying? 在这里,我看到下面的代码: IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b; System.out.println(curriedAdd.apply(1).applyAsInt(12)); 我明白这个例子总结了2个元素,但我不明白这个构造: a -> b -> a + b; 根据expression式的左边部分,该行应该执行以下function: R apply(int value); 在此之前,我只能用一个箭头认识lambda。

撰写function组合:(。)。(。)如何工作?

(.)需要两个函数,它们取一个值并返回一个值: (.) :: (b -> c) -> (a -> b) -> a -> c 由于(.)有两个参数,所以我觉得(.).(.)应该是无效的,但它是完全正确的: (.).(.) :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c 这里发生了什么? 我意识到这个问题措辞严厉……所有的function都是由于咖喱而引起的。 也许更好的方式来说这是types不匹配。

我如何定义Lisp在Haskell中的应用?

这个定义不应该像Haskell这样一个懒惰的语言被允许,在这个语言中,函数是被curry的吗? apply f [] = f apply f (x:xs) = apply (fx) xs 它基本上是一个函数,它将给定的函数应用于给定的参数列表,在Lisp中很容易完成。 有没有解决办法?