这可能听起来像是一场噩梦,但我真的很想让它发挥作用.我大部分时间都在使用这个例子:从Haskell调用C并尝试在ubuntu上运行.
我在java中运行它:
package test;
public class JniTest {
public native int fib(int x);
}
Run Code Online (Sandbox Code Playgroud)
使用javah创建.h文件之后的这个:(test_JniTest.c)
#include "test_JniTest.h"
#include "Safe_stub.h"
JNIEXPORT jint JNICALL Java_test_JniTest_fib(JNIEnv * e, jobject o, jint f)
{
return fibonacci_hs(f);
}
Run Code Online (Sandbox Code Playgroud)
然后在haskell中引用(在存根之前):( Safe.hs)
module Safe where
import Foreign.C.Types
fibonacci :: Int -> Int
fibonacci n = fibs !! n
where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
fibonacci_hs :: CInt -> CInt
fibonacci_hs = fromIntegral . fibonacci . fromIntegral
foreign export ccall …
Run Code Online (Sandbox Code Playgroud) 我正在玩类型类,并做了这个:
class Firstable f where
fst :: f a -> a
class Secondable f where
snd :: f a -> a
Run Code Online (Sandbox Code Playgroud)
然后我尝试为(,)添加一个实现,并意识到我可以这样做:
instance Secondable ((,) a) where
snd (x,y) = y
Run Code Online (Sandbox Code Playgroud)
我很确定这是有效的,因为Secondable应该有类型(* - >*)其中((,)a)具有该类型,但是,我不知道如何为((,)*a)实现Firstable,其中*是绑定变量,在我的解释中,我试图做相当于:
instance Firstable (flip (,) a) where ...
Run Code Online (Sandbox Code Playgroud)
在Haskell有办法做到这一点吗?最好没有延期?
谢谢!
我正在尝试使用haskell中的Ubigraph,但我相信我的问题更通用.我正在尝试编译:
import Graphics.Ubigraph
import Control.Monad
import System.Posix.Unistd
main = do
h <- initHubigraph "http://127.0.0.1:20738/RPC2"
runHubigraph op h
op = do
clear
vs <- mapM (const newVertex) [0..200]
mapM_ (setVAttr (VShape Sphere)) vs
putStrLn "something"
let bind i = zipWithM (\a b -> newEdge (a,b)) vs (drop i vs ++ take i vs)
mapM_ bind [1..15]
mapM_ (removeVertex) vs
return ()
Run Code Online (Sandbox Code Playgroud)
我正在接受
Run Code Online (Sandbox Code Playgroud)Couldn't match expected type `Control.Monad.Trans.Reader.ReaderT Ubigraph IO a0' with actual type `IO ()' In the return type of a …
我似乎无法弄清楚我遇到的这个问题的解决方法.
我有这样的事情:
getFilePathForDay :: Day -> IO (Maybe FilePath)
getFilePathForDays date days = do
files <- mapM getFilePathForDay $ iterate (addDays 1) date
return . take days . catMaybes $ files
Run Code Online (Sandbox Code Playgroud)
我试图得到x个有效的文件路径,其中x是我想要的天数,但上面的代码只是永远运行.我在使用monads时遇到过这个问题,我想知道是否有一个解决方法可用于我遇到的这个问题.
谢谢!
这一直困扰着我.
假设你有一个函数fxy,其中x和y是整数,你知道f在其参数中严格不减少,
即f(x + 1)y> = fxy和fx(y + 1)> = fx y.
在x和y有界的情况下,找到满足属性的最大fxy的最快方法是什么.
我当时认为这可能是鞍背搜索的变种,我想知道是否有这种类型问题的名称.
另外,更具体地说,我想知道如果你知道f是乘法运算符,是否有更快的方法来解决这个问题.
谢谢!
编辑:看到下面的评论,该属性可以是任何东西
给定属性g(其中g取值并返回布尔值)我只是寻找最大的f,使得g(f)== True
例如,一个天真的实现(在haskell中)将是:
maximise :: (Int -> Int -> Int) -> (Int -> Bool) -> Int -> Int -> Int
maximise f g xLim yLim = head . filter g . reverse . sort $ results
where results = [f x y | x <- [1..xLim], y <- [1..yLim]]
Run Code Online (Sandbox Code Playgroud) 我试图让以下代码工作:
sample_hs :: CInt -> (CInt -> CInt)
sample_hs x = (x+)
foreign export ccall sample_hs :: CInt -> (CInt -> CInt)
Run Code Online (Sandbox Code Playgroud)
我希望能够在c中做这样的事情:
pf = sample_hs(2);
result = pf(3); //Should be 5;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时,我收到一条错误消息:
错误:函数'sample_hs'的参数太少
我猜这个语言之间的接口不起作用我怎么想.有没有办法做我想做的事情?
我在使用ghc构建共享库时遇到问题,我认为我需要使用--enable-shared重建我的haskell软件包,是否有一种简单的方法可以使用标志重新构建我的所有软件包--enable-shared ?
我在Ubuntu上运行默认的Haskell平台安装,当我运行这个例子时,http://www.haskell.org/haskellwiki/Calling_Haskell_from_C "ghc -c -O Safe.hs"没有生成Safe_stub.o文件.我已经在朋友盒上以及32位和64位Ubuntu安装上单独安装Ubuntu进行了检查.
有人可以确认这是否特定于ghc-7.4.1或仅安装Ubuntu?
谢谢!
我想知道是否有一种简单的方法可以一次从文件中获取一行,而不是最终将整个文件加载到内存中.我想用attoparsec解析器在线上进行折叠.我尝试使用Data.Text.Lazy.IO
,hGetLine
这打击了我的记忆.我后来读到最终加载整个文件.
我使用也试过管道文本与folds
和view lines
:
s <- Pipes.sum $
folds (\i _ -> (i+1)) 0 id (view Text.lines (Text.fromHandle handle))
print s
Run Code Online (Sandbox Code Playgroud)
只计算行数,它似乎做了一些不稳定的东西"hGetChunk:无效的参数(无效的字节序列)",需要11分钟,wc -l
需要1分钟.我听说管道文本可能有一些巨大的线条问题?(每行约1GB)
我对任何建议都很开放,除了新手readLine
怎么样之外找不到多少搜索.
谢谢!
我想知道是否有人对如何制作一个能够获取列表的函数有任何见解,并且只返回可以在x时间内生成的术语.
例如,我有一个函数需要10分钟才能返回几个术语.我不想猜测我能生成多少个术语(使用x),我只想将无限列表输入到我的低效函数中,并有一个单独的函数来决定何时超时.
所以像这样: [5,7,10] = takeUntilTime (10 sec) . inefficientFunction $ [1..]
我对haskell很新,但我想我可以编写该函数来在每个新术语生成后检查计时器,如果时间已经过去就停止.
但是,如果第四个任期需要永恒呢?有没有办法阻止lowfficientFunction完成第四个任期的生成,即使它已经开始了?
我对一个直截了当的答案没有寄予厚望,但我对此表示赞赏.谢谢.