我正在尝试 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 的保留字符列表吗?我正在尝试启动一些用于学习目的的重要程序。我能找到一个已经使用emacs存在的功能,但我无法找到的保留字符和字符串像一个汇总列表`,,和#\。
大多数教程倾向于仅在它们适用于特定示例时才谈论它们,或者它们谈论高级表达式语法。
我有以下功能:
(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 …
我正在努力理解为什么当我更改 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 中创建新列表list的关键字,但在 Lisp 中可以调用一个参数list。我认为大多数编程语言(如 Java 或 C++)中的关键字不能用于参数 名称,Lisp 中是否有特殊原因可以使用?
我想包装内置的:
(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?我看到两条可能的路径:
splat它/apply它 [我都不知道]ex: ...谢谢
为什么字符串修剪对 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 的新手,想知道如何在 Ubuntu Linux 上正确运行一个简单的 lisp 程序。目前,我有一个名为“intmax.lisp”的 LISP 文件,其中包含以下代码:
(defun intmax (x y) (if (> x y) x y))
但是,当我转到命令行并运行时:
clisp intmax 2 4
为了比较 2 和 4,我没有得到任何输出。关于我做错了什么的任何建议?
在谈论 Painters 时,SICP 使用定义如下的程序:
(define (segments->painter segment-list)
...
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,文本并没有(还?)说明什么->代表什么。->Scheme中的用法是什么?例如,显示段将被视为画家的“方法”(或者反之亦然)是否是 OOP 风格的事情?我唯一见过这个->符号的地方是在 C 中,当然我们在这里不处理指针,所以我有点不清楚它是如何使用的或它在什么约定中使用。
所以我使用这个函数(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 …