CAPI 识别空符号

C API identify null symbol

我有以下函数来识别空符号,其中ns 应该代表空符号。

#include"k.h"

K test (K x) {
    K ns = ks("");
    if (abs(x->t) != KS) {
        R krr("type");
    }
    if (x->t > 0) {
        K res = ktn(KB,x->n);
        for (int i=0;i<x->n;++i){
            if (kK(x)[i] == ns) {
                kG(res)[i] = 1;
            }
            else {
                kG(res)[i] = 0;
            }
        }
        R res;
    }
    else {
        if (x == ns) {
            R kb(1);
        }
        else {
            R kb(0);
        }
    }
}

检查参数 x(或 arg x 的元素 kK(x)[i])与 ns 的相等性不符合我的预期。

q)`test set `:test 2: `test,1
`test
q)test ``a`b
000b          
// should be 100b

如何正确执行此比较?

你最好比较底层的字符数组而不是整个 K 对象

还请记得在完成后删除对 ns 的引用以避免内存泄漏

K test(K x) {
    K ns = ks("");
    if (abs(x->t) != KS) {
        R krr("type");
    }
    if (x->t > 0) {
        K res = ktn(KB, x->n);
        for (int i = 0; i<x->n; ++i) {
            if (kS(x)[i] == ns->s) {
                kG(res)[i] = 1;
            }
            else {
                kG(res)[i] = 0;
            }
        }
        r0(ns);
        R res;
    }
    else {
        if (x->s == ns->s) {
            r0(ns);
            R kb(1);
        }
        else {
            r0(ns);
            R kb(0);
        }
    }