LISP具有setf为变量赋值的功能.现在我一直想知道函数的名称:set部分很明显,但f后缀代表什么?
我想我只是使用setq(或者setf,我不确定区别),但我不明白如何[i][j]在lisp中引用数组中的-th元素.
我的开始条件是这样的:
? (setq x (make-array '(3 3)))
#2A((0 0 0) (0 0 0) (0 0 0))
Run Code Online (Sandbox Code Playgroud)
我想改变第三行"第二行"中的第二项来表示:
? ;;; What Lisp code goes here?!
#2A((0 0 0) (0 0 0) (0 "blue" 0))
Run Code Online (Sandbox Code Playgroud)
以下,我认为接近,给出一个错误:
(setq (nth 1 (nth 2 x)) "blue")
Run Code Online (Sandbox Code Playgroud)
那么正确的语法是什么?
谢谢!
我正在做一个接受一个列表和两个原子的程序,如果atom-1出现在列表中,则用atom-2替换atom-1.
我正在使用Ubuntu系统在文本编辑器中进行编程
以下是我的代码:
#! /usr/bin/clisp
(defun my-replace (lst x y)
(cond
((eq lst nil) nil)
((eq (cdr lst) nil) nil)
((eq (car lst) x) (setq (car lst) y))
( t (my-replace ((cdr lst) x y)))))
Run Code Online (Sandbox Code Playgroud)
当我尝试执行此操作时,Clisp显示以下错误:
*** - SYSTEM::%EXPAND-FORM: (CDR LST) should be a lambda expression
我是Lisp的初学者.
请告诉我如何解决这个错误.
当我在学习HTML时,它是非常有益的,我知道ol的手段ordered list,tr是table row等,有些口齿不清基元/形式很简单:funcall应该是function call,defmacro- define macro.有些是在中间 - incf是...... increment... f???但是因为普通的口齿不清是如此古老,这种原始/特殊形式/等......似乎没有敲响钟声.你们能帮助我搞清楚吗?更重要的是:我在哪里可以找到关于学习每一个背后的意义/历史的权威资源?(我会接受基于第二个问题的答案)
该文档也没有帮助我:
* (describe #'let)
#<CLOSURE (:SPECIAL LET) {10013DC6AB}>
[compiled closure]
Lambda-list: (&REST ARGS)
Derived type: (FUNCTION (&REST T) NIL)
Documentation:
T
Source file: SYS:SRC;COMPILER;INFO-FUNCTIONS.LISP
* (documentation 'let 'function)
"LET ({(var [value]) | var}*) declaration* form*
During evaluation of the FORMS, bind the VARS to the result of evaluating the …Run Code Online (Sandbox Code Playgroud)