我正试图进入嵌入在C++中的Common Lisp的迷人世界.我的问题是我无法从c ++中读取和打印由ECL中定义的lisp函数返回的字符串.
在C++中,我有这个函数来运行任意的Lisp表达式:
cl_object lisp(const std::string & call) {
return cl_safe_eval(c_string_to_object(call.c_str()), Cnil, Cnil);
}
Run Code Online (Sandbox Code Playgroud)
我可以用这种方式用数字来做:
ECL:
(defun return-a-number () 5.2)
Run Code Online (Sandbox Code Playgroud)
用C++读取和打印:
auto x = ecl_to_float(lisp("(return-a-number)"));
std::cout << "The number is " << x << std::endl;
Run Code Online (Sandbox Code Playgroud)
一切都设置好并且工作正常,但我不知道用字符串而不是数字来做.这是我尝试过的:
ECL:
(defun return-a-string () "Hello")
Run Code Online (Sandbox Code Playgroud)
C++:
cl_object y = lisp("(return-a-string)");
std::cout << "A string: " << y << std::endl;
Run Code Online (Sandbox Code Playgroud)
打印字符串的结果是这样的:
一个字符串:0x3188b00
我猜是字符串的地址.
这是捕获调试器和y cl_object 的内容.y-> string.self类型是一个ecl_character.