小编Joh*_*4th的帖子

在Common Lisp中为迭代创建一个宏

我试图通过创建一个简单的+=宏和iterate宏来练习在Common Lisp中创建宏.我已经设法+=轻松地创建宏,我在我的iterate宏中使用它,我有几个问题.当我尝试运行我的宏时,例如

(iterate i 1 5 1 (print (list 'one i)))
Run Code Online (Sandbox Code Playgroud)

(i控制变量在哪里,1是起始值,5是结束值,1是增量值).我收到SETQ: variable X has no value

 (defmacro += (x y)
        (list 'setf x '(+ x y)))


(defmacro iterate (control beginExp endExp incExp &rest body)
    (let ( (end (gensym)) (inc (gensym)))
        `(do ( (,control ,beginExp (+= ,control ,inc)) (,end ,endExp) (,inc ,incExp) )
            ( (> ,control ,end) T)
            ,@ body
        )
    )
) …
Run Code Online (Sandbox Code Playgroud)

lisp macros common-lisp

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

指针符号的C解释?

我在网上发现了一段代码,故意在代码中出现错误,这是调试练习的一部分.我已经修复了简单的错误,但有一行我不确定它是否有效.

#include <stdlib.h>
#include <stdio.h>

struct foo {
    int size;
    int *array;
};

typedef struct foo bar;

bar* readArray(){
    bar *fbar = (bar *)malloc(sizeof(bar));
    fbar->array = (int *)malloc(sizeof(int)*2); //ADDED THIS LINE FOR TESTING
    int i = 0;
    int temp;
    while(scanf("%d", &temp) == 1){
        *(fbar->array + (i-1)) = temp; //THIS LINE HERE
        i++;
    }
    if(i == 0){
        printf("No numbers were entered!");
    }
    fbar->size = i;
    return fbar;

}

int main(){
    bar *p = readArray();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试运行它当然会导致段错误,因为该示例没有*array的malloc空间.我尝试通过mallocing space for 2 …

c malloc pointers runtime-error

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

标签 统计

c ×1

common-lisp ×1

lisp ×1

macros ×1

malloc ×1

pointers ×1

runtime-error ×1