小编art*_*lla的帖子

用于缩进严重缩进代码的工具

考虑以下操作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)?

haskell indentation

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

在前台产生并行进程

在linux中使用bash是否有可能在前台产生并行进程?例如以下内容:

top.sh

#!/bin/bash

./myscript1.sh &
./myscript2.sh &
Run Code Online (Sandbox Code Playgroud)

将并行生成两个进程作为后台线程.但是有可能将这些产生为前景线程吗?目的是在top.sh被杀死时自动杀死myscript1.shmyscript2.sh.谢谢

linux parallel-processing bash foreground

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

通过应用单变量函数将旧的延迟序列转换为新的延迟序列

假设在clojure中我有一个懒惰的序列(abcd .....)并且假设我有一个单变量函数f(x).如何将旧的延迟序列转换为新的延迟序列(f(a)f(b)....).即我寻求转型.谢谢 :

(a b ....) [lazy] -> (f(a) f(b) ....) [also lazy]
Run Code Online (Sandbox Code Playgroud)

clojure lazy-evaluation

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

导入"base"System.IO

packages-haskell2010/System/IO.hs中,我们有以下行:

import "base" System.IO hiding (openFile, hWaitForInput)
Run Code Online (Sandbox Code Playgroud)

导入时import未记录此形式(其后跟一个字符串,然后是模块名称).假设String(在本例中)只是引用一个目录,我是否正确?"base"

haskell ghc

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

初始化int64变量

我尝试以下列方式初始化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亿?谢谢.

ocaml

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

在另一个函数中调用一个函数

我试图从另一个 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)

linux bash shell

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

增加堆栈空间

当我运行以下代码时:

(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)

sbcl common-lisp

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

记忆为ghci中的严格和/严格折叠而爆炸

如前所述(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那么内存确实炸毁.

haskell memory-leaks ghci

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

Haskell:隐藏模块中的函数(即使函数只能由同一模块中的其他函数使用)

假设我有一个文件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.我做错了什么吗?谢谢

haskell ghc ghci winghci

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

绑定/赋值运算符适用于返回String的函数,但不适用于返回Int的函数

为什么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)

haskell ghc ghci

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

修改Emacs Inferior Haskell进程以启用CPP处理

如果我们查看随机包的来源,我们就有了一个文件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)

emacs haskell ghci

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