相关疑难解决方法(0)

意外的数据持久性

我有一个七个整数的列表,最初都是0,我们称之为"数据".在运行程序的过程中,我想定期将其中一个整数的值递增一.在程序结束时我打印数据.一切都很好,除了在程序的每次连续运行中,上次运行的所有数据值都被添加到此运行的所有数据值中.我只想要来自此次运行的数据值.无论数据是类的方法中的局部变量,类的方法调用的单独函数中的局部变量,还是类的槽,都会发生这种意外行为.无论我是通过incf还是(setf value(1+ value))递增数据的各个值,都会发生这种情况.当我重新加载程序时,数据重置为全零,但是当我再次运行程序时,数据会再次添加所有的最后一次运行' s数据到此运行的数据.当我增加其中一个数据值时,我使用函数nth,其中index是另一个对象槽的值.什么可能导致我的"数据"列表的值不受欢迎的持久性?

lisp scheme common-lisp literals

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

如何从CL REPL获取函数/宏定义?

我在Common Lisp中有另一个涉及自引用的问题.我在Stack Exchange上发现了一个线程,它提出了编写最短程序的问题,该程序将打印程序源代码中不存在的所有可打印ASCII字符.这让我想到如何解决Common Lisp中的问题.我遇到了两个问题 - 一个可能是微不足道的,另一个更棘手:

  • 首先是编写CL脚本的情况,例如从#!/usr/bin/env sbcl --script.我认为通过*posix-argv*我可以访问所有命令行参数,包括被调用脚本的名称.我也寻找相当于Bash $0但却找不到.最终对我有用的是这个丑陋的Bash-ified SBCL脚本,它明确传递$0给SBCL并从那里继续:

    #!/bin/bash
    #|
    sbcl --script $0 $0
    exit
    |#
    (defun file-string (path)
      (with-open-file (stream path)
        (let ((data (make-string (file-length stream))))
          (read-sequence data stream)
          data)))
    
    (let* ((printable (mapcar #'code-char (loop for i from #x20 to #x7e collect i)))
           (absent (set-difference 
            printable 
            (coerce (file-string (cadr *posix-argv*)) 'list))))
      (print (coerce absent 'string)))
    
    Run Code Online (Sandbox Code Playgroud)

    关于这一点我的问题是:你能否想到任何方式这样做而不依赖于Bash提供相关论点?或者,更简单地说:是否有CL(特别是SBCL)相当于$0?

  • 现在是我完全困惑的部分.在采用上面的脚本方法之前,我尝试以更加面向REPL的方式实现此目标.基于此线程中的&whole说明符defmacro和注意事项,我试图从参数中获取宏的名称,并以某种方式"读入"其源代码.我完全不知道该怎么做.所以简而言之:给定宏的名称,我能以某种方式获得定义它的形式吗?我正在讨论通用解决方案,而不是解析REPL历史. …

lisp sbcl common-lisp self-reference

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

标签 统计

common-lisp ×2

lisp ×2

literals ×1

sbcl ×1

scheme ×1

self-reference ×1