小编iba*_*bab的帖子

在Common Lisp中重命名lambda

我最近开始学习Common Lisp,并且(只是为了好玩)决定重命名lambda宏.

我的尝试是这样的:

> (defmacro ? (args &body body) `(lambda ,args ,@body))
Run Code Online (Sandbox Code Playgroud)

它本身似乎正确扩展:

> (macroexpand-1 '(? (x) (* x x)))
(LAMBDA (X) (* X X))
Run Code Online (Sandbox Code Playgroud)

但是当它嵌套在表达式中时,执行失败:

> ((? (x) (* x x)) 2)
(? (X) (* X X)) is not a function name; try using a symbol instead
Run Code Online (Sandbox Code Playgroud)

我可能错过了一些关于宏扩展的明显信息,但却无法弄清楚它是什么.

也许你可以帮帮我吗?

编辑:它适用于lambda:

> ((lambda (x) (* x x)) 2)
4
Run Code Online (Sandbox Code Playgroud)

编辑2:使其工作的一种方法(由Rainer建议):

> (set-macro-character #\? (lambda (stream char) (quote lambda)))
Run Code Online (Sandbox Code Playgroud)

(在Clozure CL中测试)

macros lambda common-lisp

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

如何在TensorFlow中实现递归神经网络?

是否有一些实现递归神经网络的方法,如[Socher et al.2011]使用TensorFlow?请注意,这与TensorFlow很好地支持的递归神经网络不同.不同之处在于网络不会复制到线性操作序列中,而是复制到树结构中.

我想我可以使用Whileop来构造类似于数据集的每个条目的树数据结构的广度优先遍历.

也许可以在TensorFlow中实现树遍历作为新的C++ op,类似于While(但更一般)?

c++ python neural-network tensorflow

6
推荐指数
2
解决办法
3564
查看次数

使用SFINAE部分特化而不触及主模板

我正在尝试使用SFINAE专门为多种类型的结构模板.我知道类似以下的东西:

#include <iostream>

template <typename T, typename Enable = void>
struct S {
    void operator()() {
        std::cout << "Instantiated generic case" << std::endl;
    }
};

template<typename T>
using enabled_type = typename std::enable_if<
                         std::is_same<T, int>::value ||
                         std::is_same<T, float>::value
                     >::type;

template <typename T>
struct S<T, enabled_type<T>> {
    void operator()() {
        std::cout << "Instantiated int/float case" << std::endl;
    }
};

int main() {
    S<float>()();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法修改S 要添加的结构的主模板typename Enable = void,因为它是外部标头库的一部分.所以主模板必须如下所示:

template <typename T>
struct S {
    void operator()() …
Run Code Online (Sandbox Code Playgroud)

c++ templates partial-specialization sfinae

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