考虑以下操作Haskell代码:
代码A.
describeList :: [a] -> String
describeList xs = "The list is " ++ what xs
where what [] = "empty."
what [x] = "a singleton list."
what xs = "a longer list."
Run Code Online (Sandbox Code Playgroud)
这是从函数中的语法中获取的片段.现在假设我们从以下一段严重缩进和不可操作的Haskell代码开始:
代码B.
describeList :: [a] -> String
describeList xs = "The list is " ++ what xs
where what [] = "empty."
what [x] = "a singleton list."
what xs = "a longer list."
Run Code Online (Sandbox Code Playgroud)
那么有没有任何工具可以采用严重缩进的代码(代码B)并正确地缩进它以产生操作代码(代码A)?
在linux中使用bash是否有可能在前台产生并行进程?例如以下内容:
top.sh
#!/bin/bash
./myscript1.sh &
./myscript2.sh &
Run Code Online (Sandbox Code Playgroud)
将并行生成两个进程作为后台线程.但是有可能将这些产生为前景线程吗?目的是在top.sh被杀死时自动杀死myscript1.sh和myscript2.sh.谢谢
假设在clojure中我有一个懒惰的序列(abcd .....)并且假设我有一个单变量函数f(x).如何将旧的延迟序列转换为新的延迟序列(f(a)f(b)....).即我寻求转型.谢谢 :
(a b ....) [lazy] -> (f(a) f(b) ....) [also lazy]
Run Code Online (Sandbox Code Playgroud) 在packages-haskell2010/System/IO.hs中,我们有以下行:
import "base" System.IO hiding (openFile, hWaitForInput)
Run Code Online (Sandbox Code Playgroud)
导入时import未记录此形式(其后跟一个字符串,然后是模块名称).假设String(在本例中)只是引用一个目录,我是否正确?"base"
我尝试以下列方式初始化int64变量:
let k:int64 = 4000000000;;
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
Error: Integer literal exceeds the range of representable integers of type int
Run Code Online (Sandbox Code Playgroud)
如何将k初始化为40亿?谢谢.
我试图从另一个 bash 函数中调用一个 bash 函数,但它没有按预期工作:
#/bin/bash
function func1(){
echo "func1 : arg = ${1}"
return 1
}
function func2(){
echo "func2 : arg = ${1}"
local var=func1 "${1}"
echo "func2 : value = $var"
}
func2 "xyz"
Run Code Online (Sandbox Code Playgroud)
和当前的输出是:
Current output :
func2 : arg = xyz
func2 : value = func1
Run Code Online (Sandbox Code Playgroud)
问题:如何修改上面的程序以获得以下输出?:
Desired output :
func2 : arg = xyz
func1 : arg = xyz
func2 : value = 1
Run Code Online (Sandbox Code Playgroud) 当我运行以下代码时:
(defun countdown (n)
(if (>= n 0)
(cons n (countdown (- n 1)))))
(countdown 100000)
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
INFO: Control stack guard page unprotected
Control stack guard page temporarily disabled: proceed with caution
debugger invoked on a SB-KERNEL::CONTROL-STACK-EXHAUSTED in thread
#<THREAD "main thread" RUNNING {1002B03653}>:
Control stack exhausted (no more space for function call frames).
This is probably due to heavily nested or infinitely recursive function
calls, or a tail call that SBCL cannot or has not optimized away.
PROCEED WITH …Run Code Online (Sandbox Code Playgroud) 如前所述(sum $ takeWhile(<10000000)[1 ..])会使用如此多的内存吗?以下就不会在炸毁内存ghci的:
foldl' (+) 0 $ takeWhile (< 10000000) [1 .. ]
Run Code Online (Sandbox Code Playgroud)
但是,如果我创建一个文件包含:
import Data.List
longList::[Int]
longList = [1 .. ]
result :: Int
result = foldl' (+) 0 $ takeWhile (< 10000000) longList
main = do
print $ result
Run Code Online (Sandbox Code Playgroud)
并加载到ghci,然后在运行程序时,内存消耗爆炸.为什么这样,我该怎么做才能解决这个问题呢?我正在使用ghc 7.8.3.
[编辑]
如果我先编译,它似乎没有爆炸ghc Test.hs.但是,如果我删除所有.hi与.o文件,并加载到ghci中通过ghci Test.hs那么内存确实炸毁.
假设我有一个文件NecessaryModule.hs,它有以下内部:
module NecessaryModule where
addNumber1 :: Int -> Int -> Int
addNumber1 a b = a + b
addNumber2 :: Int -> Int -> Int
addNumber2 a b = a + b
Run Code Online (Sandbox Code Playgroud)
当我做 :
:load NecessaryModule
Run Code Online (Sandbox Code Playgroud)
addNumber1和addNumber2都在当前范围内可用.有没有办法隐藏函数addNumber2,以便它可用于同一模块中的其他函数但在我以上述方式加载模块时不加载?谢谢
[对nanothief的回应]
我按照以下方式尝试了你的建议,但它对我不起作用.我有一个名为test2.hs的文件如下:
--test2.hs
module Test2 (addNumber1) where
addNumber1 :: Int -> Int -> Int
addNumber1 a b = a + b
addNumber2 :: Int -> Int -> Int
addNumber2 a b = a + b
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
:load test2
Run Code Online (Sandbox Code Playgroud)
然后我可以调用addNumber1和addNumber2.我做错了什么吗?谢谢
为什么Prog A编译运行正常,而Prog B无法编译?谢谢
Prog A.
func :: String -> String
func a = a
mydofn a = do
x <- func a
return x
main = print "Finished"
Run Code Online (Sandbox Code Playgroud)
Prog B.
func :: Int -> Int
func a = a
mydofn a = do
x <- func a
return x
main = print "Finished"
Run Code Online (Sandbox Code Playgroud)
Prog B编译错误:
Couldn't match expected type `m0 t0' with actual type `Int'
In the return type of a call of `func'
In a stmt of a 'do' …Run Code Online (Sandbox Code Playgroud) 如果我们查看随机包的来源,我们就有了一个文件Random.hs.由于CPP扩展,必须通过以下命令调用ghci:
ghci -cpp Random.hs
Run Code Online (Sandbox Code Playgroud)
或者可以做:
ghci -cpp
Run Code Online (Sandbox Code Playgroud)
然后从ghci内:
Prelude GOA> :load Random
[1 of 1] Compiling System.Random ( Random.hs, interpreted )
Ok, modules loaded: System.Random.
Run Code Online (Sandbox Code Playgroud)
如果我使用Emacs Inferior Haskell模式(Emacs/Inferior Haskell进程),我有源:
module Main where
import System.Random
gen = (random (mkStdGen 0)) :: (Bool,StdGen)
mymult :: Int -> Int
mymult x = 2 * x
main = do
print $ mymult 5
Run Code Online (Sandbox Code Playgroud)
然后输入emacs命令:
C-c C-l
Run Code Online (Sandbox Code Playgroud)
这是inferior-haskell-load-file,ghci的是在emacs的一个子窗口打开.但是,如果从这个窗口我键入load Random.hs然后我收到错误消息:
*Main GOA> :load Random.hs
Random.hs:1:2: lexical …Run Code Online (Sandbox Code Playgroud) haskell ×6
ghci ×4
ghc ×3
bash ×2
linux ×2
clojure ×1
common-lisp ×1
emacs ×1
foreground ×1
indentation ×1
memory-leaks ×1
ocaml ×1
sbcl ×1
shell ×1
winghci ×1