小编Max*_*AST的帖子

连接Haskell和C++

我想在c ++程序中调用一些Haskell函数.

为了做到这一点,我已经应用了这些 指令并将它们改编为我的代码和系统.

我目前所拥有的是以下内容:

  • Main.cpp的
  • 共享头文件和cpp文件
  • 生成文件
  • CPP /
    • 一些cpp和头文件
  • 哈斯克尔/
    • hello.hs

make文件如下:

CPP_SOURCES = main.cpp textures.cpp cpp/game.cpp \
cpp/piece.cpp cpp/factories.cpp cpp/utils.cpp
HASKELL_SOURCES = haskell/hello.hs

all: main; ./main

main: $(CPP_SOURCES) HaskellPart.o; g++ \
    -lsfml-graphics \
    -lsfml-window \
    -lsfml-system \
    -I/usr/lib/ghc/include \
    -liconv \
    -I/usr/lib/ghc/ghc-8.0.1/include \
    -L/usr/lib/ghc/ghc-8.0.1 \
    -L/usr/lib/ghc/rts \
    -lHSrts \
    -L/usr/lib/ghc/base-4.9.0.0 \
    -lHSbase-4.9.0.0 \
    -L/usr/lib/ghc/ghc-prim-0.5.0.0 \
    -lHSghc-prim-0.5.0.0 \
    -L/usr/lib/ghc/integer-gmp-1.0.0.1 \
    -lHSinteger-gmp-1.0.0.1 \
    -lHSghc-prim-0.5.0.0 \
    -fno-stack-protector \
    -Wall \
    -o main $(CPP_SOURCES) haskell/hello.o

HaskellPart.o: $(HASKELL_SOURCES); ghc -fforce-recomp -fPIC …
Run Code Online (Sandbox Code Playgroud)

c++ haskell g++ ghc

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

从c ++调用Haskell

我试图从c ++调用Haskell.

我试着用这个解释; 已经问了一个关于SO的问题.

但是,我没有得到任何答案,所以我想重新制定一个最小的,完整的,可验证的例子.

我正在使用Debian,这就是我所拥有的(在同一个文件夹中):

C++:

// main.cpp
#include <iostream>
#include "Hello_stub.h"

int main(int argc, char** argv) {
  hs_init(&argc, &argv);
  std::cout << "Hello from C++\n";
  helloFromHaskell();
  hs_exit();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

哈斯克尔:

// hello.hs
module Hello where

foreign export ccall helloFromHaskell :: IO ()

helloFromHaskell :: IO ()
helloFromHaskell = putStrLn "Hello from Haskell"
Run Code Online (Sandbox Code Playgroud)

生成文件:

CPP_SOURCES = main.cpp
HASKELL_SOURCES = Hello.hs
CFLAGS = -Wall -g -fno-stack-protector
HFLAGS = -fforce-recomp

all: main; ./main

main: $(CPP_SOURCES) HaskellPart; g++ …
Run Code Online (Sandbox Code Playgroud)

c++ haskell g++ ghc

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

Python struct.unpack无法正常工作

我试图运行这个:

def ReadWord(fid,fmt,Addr):
    fid.seek(Addr)
    s = fid.readline(2)
    s = unpack(fmt + 'h', s)
    if(type(s) == tuple):
        return s[0]
    else:
        return s    
Run Code Online (Sandbox Code Playgroud)

有:

len(s) = 2
len(fmt) = 1
calcsize(fmt) = 0
calcsize(fmt + 'h') = 2
Run Code Online (Sandbox Code Playgroud)

但是,Python返回:

struct.error:unpack需要长度为4的字符串参数

根据python struct.unpack 文档:

该字符串必须包含格式所需的数据量(len(字符串)必须等于calcsize(fmt)).

因此,如果我的字符串的长度是2并且calcsize fmt+'h'也是2,为什么python说"unpack需要一个长度为4的字符串参数"?

编辑:

谢谢你的所有答案.这是完整的代码:

http://qtwork.tudelft.nl/gitdata/users/guen/qtlabanalysis/analysis_modules/general/lecroy.py

因此,您可以在read_timetrace函数中看到,fmt设置为'<''>'if...else语句中.打印确认了这一点.

你也应该知道我正在使用windowsx64(工作).

EDIT2

这是完整的追溯,对不起这个错误.

Traceback (most recent call last):
  File "C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Include\readLecroyTRCFile.py", line 139, in <module> …
Run Code Online (Sandbox Code Playgroud)

python

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

Angular Google映射地理编码回调

我有一些谷歌地图地理编码api的问题.

我正在使用Angular Google Maps并尝试使用回调函数对地址进行地理编码:

.controller('myCtrl', ['$scope', '$rootScope', 'uiGmapGoogleMapApi', function ($scope, $rootScope, uiGmapGoogleMapApi) {

    // To be set by previous step
    $rootScope.chosenTown = "Roma"

    // geocode the given address
    var geocodeAddress = function(address, callback) {
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                callback(results[0].geometry.location);
            } else {
                console.log("Geocode was not successful for the following reason: " + status);
            }
        });
    };

    // google maps is ready
    uiGmapGoogleMapApi.then(function(maps) {
        // geocode chosen town …
Run Code Online (Sandbox Code Playgroud)

javascript google-maps callback google-geocoding-api angularjs

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

'language.MatchStrings()'返回垃圾

我正在执行以下代码:

var languageMatcher = language.NewMatcher([]language.Tag{
    language.English, // Default if no match
    language.French,
})

lang, _ := r.Cookie("lang")
accept := r.Header.Get("Accept-Language")

var cookieValue = ""

if cookie != nil {
    cookieValue = lang.String()
}

tag, _ := language.MatchStrings(languageMatcher, cookieValue, accept)

log.Debugf(ctx, fmt.Sprintf("Localized %s to %s. cookie: %s | header: %s", path, tag.String(), cookieValue, accept))

http.Redirect(w, r, "/"+tag.String()+path, 302)
Run Code Online (Sandbox Code Playgroud)

大部分来自 GoDoc

它在大多数情况下都能正常工作,但有时(从从未访问过该网站的计算机上以私有模式进行浏览时,或者从浏览器中删除整个缓存(无lang cookie)时);该language.MatchStrings函数在tag变量(如)中返回一堆垃圾en-u-rg-uszzzz

这是我的log.Debugf输出:

Localized / to en-u-rg-uszzzz. cookie: | header: en-US,en;q=0.9

知道什么是错的吗?

internationalization go

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