小编And*_*ewC的帖子

在Mac OS X中链接动态库(libjvm.dylib)(rpath问题)

我确实有一个需要链接的应用程序libjvm(来自JDK的库需要进行JNI绑定).当我告诉libjvm.dylib使用-L它的位置成功编译和链接.但是,当我运行二进制文件时,我得到:

dyld: Library not loaded: @rpath/libjvm.dylib
  Referenced from: <my home directory>/./mybinary
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

到目前为止,我发现我可以像我这样运行指定LD_LIBRARY_PATH的二进制文件:

LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
Run Code Online (Sandbox Code Playgroud)

但我当然不希望这样.如果每次启动应用程序时必须一次又一次地给它,我为什么还要指定确切的位置?!

我还了解到mac os x上的动态库确实得到了一种说明位置的印章.但是我不知道是什么rpath(对我来说似乎是变量,但如何在链接期间设置它?).

该应用程序是使用haskell构建的,但我同样可以手动链接目标文件ld.但是,我坚持使用那个rpath的东西 - 这对JDK库来说可能是特殊的吗?

这是我为了构建而做的事情:

ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary
Run Code Online (Sandbox Code Playgroud)

macos java-native-interface linker haskell ghc

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

尾递归识别

我正在努力学习Haskell,我偶然发现了以下内容:

myAdd (x:xs) = x + myAdd xs
myAdd null = 0

f = let n = 10000000 in myAdd [1 .. n]

main = do
 putStrLn (show f)
Run Code Online (Sandbox Code Playgroud)

使用GHC进行编译时,会产生堆栈溢出.作为一名C/C++程序员,我本以期望编译器进行尾调用优化.

我不喜欢在这样的简单情况下我必须"帮助"编译器,但有什么选择?我认为要求在不使用O(n)存储器的情况下完成上面给出的计算是合理的,并且不需要推迟专门的功能.

如果我不能自然地陈述我的问题(即使是这样的玩具问题),并且期望在时间和空间方面有合理的表现,那么Haskell的大部分吸引力都会丢失.

haskell ghc

8
推荐指数
3
解决办法
574
查看次数

使用IO monads编写大部分代码是否可以

我正在尝试使用Haskell开发聊天服务器.

有很多像有用的工具TChan,TSkiplist,forkIO...等等,但事实证明,我的大部分代码是IO单子和unsafePerformIO,这听起来非常低效里面写.

这样做是否可以,或者haskell不是用于此目的的正确工具?

monads haskell

8
推荐指数
3
解决办法
736
查看次数

如何将字符串从Haskell传递给C?

我想要做的就是将一个纯文本字符串从Haskell传递给C.但是,它说[Char]是一种不可接受的返回类型.我无法找到他们认为的原因,也无法找到可接受的返回类型.

我正在尝试制作一个非常简单的操作系统映像,我可以用Qemu启动它.

有谁知道如何做到这一点?谢谢.

    {-# LANGUAGE ForeignFunctionInterface #-}

    module Hello where

    import Foreign
    import Foreign.C.String
    import Foreign.C.Types

    hello :: String -> (CString -> IO a) -> IO a
    hello = "Hello, world!"

    foreign export ccall hello :: String -> (CString -> IO a) -> IO a
Run Code Online (Sandbox Code Playgroud)

c haskell ffi

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

如何通过以下方式更改WinGHCi编辑器:set editor?

我想使用Notepad ++而不是Notepad作为GHCi在我输入时调用的编辑器:edit.有谁知道如何做到这一点?我试过了

:set editor C:\Program Files (x86)\Notepad++
:set editor "C:\Program Files (x86)\Notepad++"
Run Code Online (Sandbox Code Playgroud)

但这些都不起作用.

谢谢您的帮助!

haskell ghci

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

stateflow和simulink有什么区别?

据我所知,stateflow和simulink经常同时使用,并且都是MathWorks开发的环境,他们制作了Matlab.我可以知道它们之间有什么区别吗?

matlab simulink stateflow

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

Turtle Graphics作为Haskell Monad

我正在尝试在Haskell中实现龟图形.目标是能够编写如下函数:

draw_something = do
    forward 100
    right 90
    forward 100
    ...
Run Code Online (Sandbox Code Playgroud)

然后让它产生一个点列表(可能有其他属性):

> draw_something (0,0) 0        -- start at (0,0) facing east (0 degrees)
[(0,0), (0,100), (-100,100), ...]
Run Code Online (Sandbox Code Playgroud)

我已经以"正常"的方式工作了所有这些,但我没有将它作为Haskell Monad实现并使用do-notation.基本代码:

data State a = State (a, a) a -- (x,y), angle
    deriving (Show, Eq)

initstate :: State Float
initstate = State (0.0,0.0) 0.0


-- constrain angles to 0 to 2*pi
fmod :: Float -> Float
fmod a 
    | a >= 2*pi = fmod (a-2*pi)
    | a <  0 …
Run Code Online (Sandbox Code Playgroud)

monads haskell turtle-graphics

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

Haskell派生Show为自定义类型

如何告诉haskell在show代数类型的变量列表上调用时,应在每行之后插入"\n"?

type Customer = (Int, Int, [Int])
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

instance of Show Customer where
show x = x ++ "\n"
Run Code Online (Sandbox Code Playgroud)

但显然我只能为"数据......"创造这样的实例.我怎么解决这个问题?

我需要派生出Show一个客户列表,这样当我显示它时,输出很容易阅读,每行一个客户.

haskell instance show

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

应用函数和左边的任何一个

我一直在阅读这本伟大的好书,但我正在与Applicative Functors稍作讨论.

在下面的示例max中应用了两个Maybe functor的内容并返回Just 6.

max <$> Just 3 <*> Just 6
Run Code Online (Sandbox Code Playgroud)

为什么在以下示例中Left "Hello"返回而不是Either仿函数的内容:Left "Hello World"

(++) <$> Left "Hello" <*> Left " World"
Run Code Online (Sandbox Code Playgroud)

haskell functor either applicative

7
推荐指数
2
解决办法
1872
查看次数

在Haskell中键入自动函数约束推导的约束

出于教育目的,我在Haskell玩树.我的Tree a类型定义如下

data Tree a = EmptyTree | Node a (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)

和很多共享基本约束的函数Ord a- 所以他们有类似的类型

treeInsert :: Ord a => a -> Tree a -> Tree a
treeMake :: Ord a => [a] -> Tree a
Run Code Online (Sandbox Code Playgroud)

等等.我也可以Tree a这样定义

data Ord a => Tree a = EmptyTree | Node a (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)

但我不能简化我的功能,省略额外Ord a的如下:

treeInsert :: a -> Tree a -> Tree a
treeMake :: [a] -> Tree a …
Run Code Online (Sandbox Code Playgroud)

haskell types type-deduction

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