在带有lambda b93的JDK 8中,b93中有一个类java.util.stream.Streams.zip可用于压缩流(这在教程Exploring Java8 Lambdas中说明.Dhananjay Nene的第1部分).这个功能:
创建一个惰性和顺序组合Stream,其元素是组合两个流的元素的结果.
然而在b98中,这已经消失了.事实上,在b98Streams中的java.util.stream中甚至无法访问该类.
是否已移动此功能,如果是这样,我如何使用b98简洁地压缩流?
我想到的应用程序是在Shen的这个java实现中,我在其中替换了zip中的zip功能
static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred)static <T> T find(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred)具有相当冗长代码的函数(不使用b98中的功能).
lambda functional-programming lazy-evaluation java-8 java-stream
考虑以下程序.它永远运行并没有任何用处,但ghci中的内存消耗是不变的:
--NoExplode.hs
module Main (main) where
test :: [Int] -> IO()
test lst = do
print "test"
rList lst
rList :: [Int] -> IO ()
rList [] = return ()
rList (x:xs) = do
rList xs
main = do
test [1..]
Run Code Online (Sandbox Code Playgroud)
现在考虑以上的以下简单修改版本.当这个程序在ghci中运行时,内存会爆炸.唯一的区别是print "test"现在分配给x了do块test.
--Explode.hs
module Main (main) where
test :: [Int] -> IO()
test lst = do
x <- print "test"
rList lst
rList :: [Int] -> IO ()
rList [] = …Run Code Online (Sandbox Code Playgroud) 在Haskell中是否有一个命令显示(或作为列表)所有已在GHCi中加载/定义的用户定义函数?谢谢
问题1
嗨,如果在WinGHCi中我故意做以下错误的代码:
3 4
Run Code Online (Sandbox Code Playgroud)
然后我收到的错误消息是
<interactive>:1:1:
No instance for (Num (a0 -> t0))
arising from the literal `3'
Possible fix: add an instance declaration for (Num (a0 -> t0))
In the expression: 3
In the expression: 3 4
In an equation for `it': it = 3 4
Run Code Online (Sandbox Code Playgroud)
究竟是什么No instance for (Num (a0 -> t0))意思?
问题2
为什么以下代码:
(+) 2 3 4
<interactive>:1:7:
No instance for (Num (a0 -> t0))
arising from the literal `3'
Possible fix: add an instance …Run Code Online (Sandbox Code Playgroud) 假设我有两个模块NecessaryModule1和NecessaryModule2(如后Haskell中所述:在当前目录路径中加载所有文件.然后我注意到在WinGHCi和GHCi中,如果我这样做:
> :load NecessaryModule1
[1 of 1] Compiling NecessaryModule1 ( NecessaryModule1.hs, interpreted )
Ok, modules loaded: NecessaryModule1.
> addNumber1 2 3
5
> :load NecessaryModule2
[1 of 1] Compiling NecessaryModule2 ( NecessaryModule2.hs, interpreted )
Ok, modules loaded: NecessaryModule2.
> addNumber1 2 3
<interactive>:1:1: Not in scope: `addNumber1'
Run Code Online (Sandbox Code Playgroud)
即加载NecessaryModule2消除了NecessaryModule1的所有功能.
那么这是否意味着我可以同时加载NecessaryModule1和NecessaryModule2的唯一方法是使用第三个文件(导入NecessaryModule1和NecessaryModule2)然后加载第三个文件?(例如,参见Haskell中的 test.hs :在当前目录路径中加载所有文件)谢谢.
[对geekosaur的反应]
嗨,所以如果我已经完成:load NecessaryModule1,然后我想在MyMod.hs中加载模块:
--MyMod.hs
module MyMod where
import Data.List
f x = sort x
Run Code Online (Sandbox Code Playgroud)
那怎么办呢?在Haskell中:WinGHCi中的卸载模块 Riccardo解释说:module假设模块已经加载.那么这是否意味着实现加载多个自定义模块的唯一方法是通过单次调用:load函数来加载它们?谢谢.
在haskell-mode的emacs中,我想更改命令
至
从以下提示:Haskell.org:Emacs/Keybindings和简单用法我尝试将以下变体插入.emacs文件但它们不起作用.关于如何实现上述功能的任何建议都将受到欢迎!谢谢.
变式1
(defun haskell-hook ()
(define-key haskell-mode-map (kbd "C-x C-s") (kbd "C-x C-s C-c C-l"))
(add-hook 'haskell-mode-hook 'haskell-hook)
Run Code Online (Sandbox Code Playgroud)
变体2
(defun haskell-hook ()
(define-key haskell-mode-map (kbd "C-x C-s") 'my-haskell-mode-save-buffer)
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro [?\C-s ?\C-x ?\C-c ?\C-l return]))
(add-hook 'haskell-mode-hook 'haskell-hook)
Run Code Online (Sandbox Code Playgroud)
[编辑1] @Tikhon Jelvis:这绝对是一个很好的学习练习!谢谢.使用帖子中列出的方法,我将您的功能更改为:
(defun my-haskell-mode-save-buffer ()
(interactive)
(save-buffer)
(inferior-haskell-load-file)
(other-window 1))
Run Code Online (Sandbox Code Playgroud)
最后一行以编程方式将光标切换到交互式窗口.谢谢.
[EDIT2]其他变种包括:
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro (read-kbd-macro "C-c C-l"))
(other-window 1))
Run Code Online (Sandbox Code Playgroud)
并且:
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro …Run Code Online (Sandbox Code Playgroud) 我最初编写了这个(强力和低效)计算素数的方法,目的是确保在Haskell中使用"if-then-else"与守卫之间的速度没有差别(并且没有区别!).但后来我决定编写一个C程序进行比较,我得到了以下内容(Haskell慢了25%):
(注意我从以下帖子中获得了使用rem而不是mod以及编译器调用中的O3选项的想法:在Fibonacci微基准测试中改进Haskell的性能与C相比)
Haskell:Forum.hs
divisibleRec :: Int -> Int -> Bool
divisibleRec i j
| j == 1 = False
| i `rem` j == 0 = True
| otherwise = divisibleRec i (j-1)
divisible::Int -> Bool
divisible i = divisibleRec i (i-1)
r = [ x | x <- [2..200000], divisible x == False]
main :: IO()
main = print(length(r))
Run Code Online (Sandbox Code Playgroud)
C:main.cpp
#include <stdio.h>
bool divisibleRec(int i, int j){
if(j==1){ return false; }
else if(i%j==0){ return true; }
else{ …Run Code Online (Sandbox Code Playgroud) 假设我有一个子模块dir1/dir2(通过下面显示的步骤创建)。dir2删除子模块后如何恢复它?
git submodule update抱怨子模块不存在,并git reset HEAD --hard恢复dir2但不恢复其内容。我正在以下列方式创建子模块:
mkdir dir1
cd dir1/
mkdir dir2
cd dir2/
touch 1.txt
git init
git add 1.txt
git commit -m "test"
cd ..
git init
git submodule add ./dir2/
git commit -m "adding submodule"
rm -r dir2
**** Now how do I restore dir2 and its contents? ****
Run Code Online (Sandbox Code Playgroud) Haskell中的纯函数是否有可能改变变量的局部副本,就像在函数式编程是一个骗局中提到的那样.大卫·诺伦?如果不是这样的原因是什么原因,如果有的话,有没有人能指出我的例子?
类似的问题在函数中被问到,这些函数看起来对调用者来说是纯粹的,但在内部使用变异,并且普遍的共识似乎是纯函数执行变异是可行的,只要突变是在变量的局部副本上执行的(即效果)突变不会逃避功能并具有非局部效应).
问题出现了,当我翻译成沉冒泡排序(局部突变,全球突变,可变数据结构,冒泡齐),这并没有发生变异的名单,以共同Lisp和相比,在冒泡Common Lisp中冒泡,这确实发生变异列表.结果是我发现(在Common Lisp中)对于非常大的列表而言,变异列表的版本明显比没有变异列表的版本快得多.
在加载源文件时,它指出使用-i选项指定用于查找源文件的搜索路径:
ghci -idir1:...:dirn
Run Code Online (Sandbox Code Playgroud)
这是否意味着当一个人执行时:
:load test.hs
Run Code Online (Sandbox Code Playgroud)
然后ghci在上面的目录中查找test.hs?我在问题指定源目录到GHC时看到了响应, 但我仍然不清楚这一点.
例如,在Windows XP中,我将test.hs放入:
C:\Documents and Settings\winuser\My Documents
Run Code Online (Sandbox Code Playgroud)
然后跑:
ghci -iC:\Documents and Settings\winuser\My Documents
Run Code Online (Sandbox Code Playgroud)
但是,在做的时候:load test.hs,ghci抱怨无法找到该文件.
[编辑1]
我想避免使用,:cd因为它卸载了所有已加载的模块,这阻止我从多个位置加载文件
[编辑2:对jozefg的回应]
--C:\A\A.hs
module A where
myaddA::Int->Int->Int
myaddA x y = x+y
--C:\B\B.hs
module B where
myaddB::Int->Int->Int
myaddB x y = x+y
Run Code Online (Sandbox Code Playgroud)
然后我可以做以下事情:
Prelude> :cd C:\A
Prelude> :load A
[1 of 1] Compiling A ( A.hs, interpreted )
Ok, modules loaded: A.
*A> myaddA 2 3
5
*A> :cd …Run Code Online (Sandbox Code Playgroud) haskell ×8
ghci ×5
ghc ×4
winghci ×3
c ×1
elisp ×1
emacs ×1
git ×1
haskell-mode ×1
immutability ×1
java-8 ×1
java-stream ×1
lambda ×1
macros ×1
math ×1
memory-leaks ×1
optimization ×1