标签: lisp

Autolisp 实体数据检索

我正在尝试 autocad,我想在矩形和直线之间建立一条“高速公路”。我需要矩形中的 2 个点。有任何想法吗?

(setq en(car(entsel"\Get rectangle : ")))
 (entget en)
Run Code Online (Sandbox Code Playgroud)

我的整个代码

    (defun temaLisp(/  )
  ;HIGHWAY BUILDER
  ;My project is a highwaybulder
  ;How does it work?
  ;Select a rectangle and draw from there to a distance the highway where it meets a stop(Line)
      (princ "TemaLisp ")
   ;get rectangle (prompt "\nSelect the ends of a station")
  (setq en(car(entsel"\Get rectangle : ")))
  (entget en)
  ;get the stop (Line)


     (setq line2 (car (entsel "\nSelect the second line: ")))
            (setq p3 (cdr (assoc 10 …
Run Code Online (Sandbox Code Playgroud)

lisp arrays list autocad autolisp

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

Lisp:在哪里可以找到 sbcl 的保留字符列表?

有人能指出 Lisp 的保留字符列表吗?我正在尝试启动一些用于学习目的的重要程序。我能找到一个已经使用emacs存在的功能,但我无法找到的保留字符和字符串像一个汇总列表`,#\

大多数教程倾向于仅在它们适用于特定示例时才谈论它们,或者它们谈论高级表达式语法。

lisp sbcl common-lisp reserved-words

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

在 Common Lisp 中映射数组时,两个缺点指向相同的内存

我有以下功能:

(defun transform-matrix (matrix)
   (let ((res (map 'vector
                   (lambda (x)
                       (map 'vector
                            (lambda (ix)
                                (if ix
                                    '(t 0) ; --> Problem happens here
                                    0))
                            x))
                   matrix)))
    res))
Run Code Online (Sandbox Code Playgroud)

此函数将接受一个二维矩阵,其中每个元素可以是 t 或 nil。然后它将转换 t -> '(t 0) 和 nil -> 0。

结果数组有一个问题是每个 (t 0) cons 现在都指向相同的内存位置。例如,如果我将结果数组保存在res变量中并执行以下操作:

(eq (aref (aref res 0) 0)
    (aref (aref res 1) 1))
Run Code Online (Sandbox Code Playgroud)

*假设 res[0][0] 和 res[1][1] 是 '(t, 0) 节点。

这将导致 T。但这样做是导致 nil:

(eq '(t 0) '(t 0))
Run Code Online (Sandbox Code Playgroud)

我能问一下使创建的 cons 指向相同内存位置的变换矩阵会发生什么吗?

我在 SBCL …

lisp arrays sbcl common-lisp cons

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

我正在努力理解为什么当我更改列表中的某些值时某些 Lisp 数据会发生变化而其他的则不会

我正在努力理解为什么当我更改 l1 列表的值时,双参数宏会更改结果列表中的值而双列表不会。让我把步骤展示得更清楚。我已经用值 '(1 2 3 4) 定义了列表 l1,

(setq l1 '(1 2 3 4))
Run Code Online (Sandbox Code Playgroud)

然后我在下面加载这个代码

    (defmacro double-args (&rest args)
`(let ((ret nil))
    ( dolist (x ,@args )
        (setq ret (append ret (list x x))))
    
   ret) )

(defun macroteste (&rest x) (double-args x))

 ;; first simple macro example:

(defmacro double-list (a-list)
  (let ((ret (gensym)))
   `(let ((,ret nil))
     (dolist (x ,a-list)
      (setq ,ret (append ,ret (list x x))))
 ,ret)))

 ;; use the macro:

 (defun doublelistmacro (x)
  (double-list x))
Run Code Online (Sandbox Code Playgroud)

在此之后,我执行了宏,macroteste 与列表 l1 …

lisp clisp common-lisp

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

在 Lisp/Racket/Scheme 中,怎么可能有一个名为“list”的参数?

不是在 Lisp 中创建新列表list关键字,但在 Lisp 中可以调用一个参数list。我认为大多数编程语言(如 Java 或 C++)中的关键字不能用于参数 名称,Lisp 中是否有特殊原因可以使用?

lisp scheme arguments function-call racket

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

common-lisp — 如何包装具有 var-args 的内置函数?

我想包装内置的:

     (concatenate ‘string <arg1> <arg2> .. <argn>)
Run Code Online (Sandbox Code Playgroud)

成为这样的事情:

     (strcat <arg1> <arg2> ... <argn>)
Run Code Online (Sandbox Code Playgroud)

问题是 - 如何在 common-lisp 中做 var-args?我看到两条可能的路径:

  1. 接受一个列表作为参数,然后splat它/apply它 [我都不知道]
  2. common-lisp 中的 var-args 特殊语法? ex: ...

谢谢

lisp common-lisp variadic-functions

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

字符串修剪不适用于全局变量

为什么字符串修剪对 Common Lisp 中的全局变量不起作用?

(defvar *whitespaces* '(#\Space #\Newline #\Backspace #\Tab
                        #\Linefeed #\Page #\Return #\Rubout))
(defvar *str* "Hello     World")

(defun trim (s)
  (string-trim *whitespaces* s))

(print (trim *str*))
;; output "Hello     World"



Run Code Online (Sandbox Code Playgroud)

lisp string trim common-lisp

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

在 Linux (Ubuntu WSL) 上通过 CLISP 运行 LISP 代码

我是 LISP 的新手,想知道如何在 Ubuntu Linux 上正确运行一个简单的 lisp 程序。目前,我有一个名为“intmax.lisp”的 LISP 文件,其中包含以下代码:

(defun intmax (x y) (if (> x y) x y))

但是,当我转到命令行并运行时:

clisp intmax 2 4

为了比较 2 和 4,我没有得到任何输出。关于我做错了什么的任何建议?

lisp linux clisp common-lisp windows-subsystem-for-linux

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

在 Scheme/SICP 中使用“-&gt;”

在谈论 Painters 时,SICP 使用定义如下的程序:

(define (segments->painter segment-list)
   ...
)
Run Code Online (Sandbox Code Playgroud)

不幸的是,文本并没有(还?)说明什么->代表什么。->Scheme中的用法是什么?例如,显示段将被视为画家的“方法”(或者反之亦然)是否是 OOP 风格的事情?我唯一见过这个->符号的地方是在 C 中,当然我们在这里不处理指针,所以我有点不清楚它是如何使用的或它在什么约定中使用。

lisp scheme sicp racket

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

在 CLISP 中设置随机状态

所以我使用这个函数(random 3)在我猜测的 0 和 3 之间生成一个随机数,但是每次我运行程序时它每次都输出数字 3,当我尝试时(random 2)它总是输出 1。我查找了我需要做什么和一个关于堆栈溢出的不同帖子说我需要初始化随机状态,我认为我需要这样做,所以我把这段代码放在我的程序的顶部,那是它出问题的时候。

(setf *random-state* (current-time))
Run Code Online (Sandbox Code Playgroud)

在我把这段代码放在顶部并运行程序后,我首先从控制台收到一个看起来像这样的错误。

*** - Program stack overflow. RESET
Run Code Online (Sandbox Code Playgroud)

我再次尝试运行该程序,但出现了这个超级古怪的错误。

*** - handle_fault error2 ! address = 0x137c9500 not in [0x1a920000,0x1aaa7acc) !
SIGSEGV cannot be cured. Fault address = 0x137c9500.
GC count: 0
Space collected by GC: 0 0
Run time: 0 625000
Real time: 0 543820
GC time: 0 0
Permanently allocated: 92512 bytes.
Currently in use: 2734320 bytes.
Free space: 5 bytes.
Run Code Online (Sandbox Code Playgroud)

然后我从 Windows …

lisp clisp common-lisp

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