Lisp关联列表

Lisp关联列表,lisp,associative,Lisp,Associative,它提供输出 “*句*: ((1.测试1)(2.测试2)) 句子:无” 为什么它不给出(2.测试2)作为“句子”的值 提前谢谢 编辑:添加括号。原始程序有匹配的括号。您的let表单中缺少括号: (defun next () (defparameter *sentences* '( (1 . "Test 1") (2 . "Test 2"))) (let (sentence '(assoc 2 *sentences*)) ;This quote is nee

它提供输出 “*句*: ((1.测试1)(2.测试2)) 句子:无”

为什么它不给出(2.测试2)作为“句子”的值

提前谢谢


编辑:添加括号。原始程序有匹配的括号。

您的
let
表单中缺少括号:

(defun next ()
  (defparameter *sentences*
    '(
      (1 . "Test 1")
      (2 . "Test 2")))

  (let (sentence '(assoc 2 *sentences*)) ;This quote is needed, another program evaluates this.
    (format t "*sentences*:~%~a~%sentence: ~a~%" *sentences* sentence)))

谢谢这就是问题所在。
DEFUN
中的
DEFPARAMETER
几乎总是错误的。@RainerJoswig那么我应该把它放在哪里?你想做什么?@RainerJoswig在调用函数时初始化变量*语句*。它可能只初始化一次,因此后续函数调用不会再次初始化它。使用
DEFPARAMETER
定义/初始化全局特殊变量。使用
SETF
SETQ
进行设置。
(defun next ()
  (defparameter *sentences*
    '(
      (1 . "Test 1")
      (2 . "Test 2")))
  (let ((sentence (assoc 2 *sentences*))) ;no quote, just parentheses ;-)
    (format t "*sentences*:~%~a~%sentence: ~a~%" *sentences* sentence)))