标签: lisp

计划范围(Lisp)

我知道该方案是一个词法范围/静态范围的语言,但我不明白为什么这两个代码块返回不同的结果.

   (define a 100)
   (let ((z 20))
      (lambda (a b) (+ a b)) a z)
Run Code Online (Sandbox Code Playgroud)

20

 (define a 100)
 (let ((z 20)) 
      (lambda (a b) (+ a b)) z a)
Run Code Online (Sandbox Code Playgroud)

100

lisp scheme scope lexical

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

如何用nil创建点对

我有一个队列名称列表,格式如下:

'("foo" "bar")
Run Code Online (Sandbox Code Playgroud)

我试图以下列方式将队列存储为关联列表:

'(("foo" . nil) ("bar" . nil))
Run Code Online (Sandbox Code Playgroud)

基本上它是一个关联列表,其中队列"foo"和"bar"当前是空的.当Bob和Alice将处于"foo"队列时,它应如下所示.

'(("foo" . ("alice" "bob")) ("bar" . nil))
Run Code Online (Sandbox Code Playgroud)

我该如何创建这个结构?我试图通过写:

(mapcar #'(lambda (x) (cons x ''nil)) '("foo" "bar"))
Run Code Online (Sandbox Code Playgroud)

哪个回来了

'(("foo" QUOTE NIL) ("bar" QUOTE NIL))
Run Code Online (Sandbox Code Playgroud)

这可能不是我想要的,因为当我试图将Bob推到"foo"队列时,它根本无法正常工作.

* (setf *tmp* '(("foo" . 'nil) ("bar" . 'nil)))
(("foo" QUOTE NIL) ("bar" QUOTE NIL))
* (push "bob" (caddr (assoc "foo" *tmp* :test #'string=)))
* *tmp*
(("foo" QUOTE ("bob")) ("bar" QUOTE NIL))
Run Code Online (Sandbox Code Playgroud)

如何在点后创建带空列表的点对?

编辑: 实际上,当我将这样的关联列表存储为类槽时,它看起来很好.

* (describe myClassInstance)
;; ...
QUEUES    = (("foo" . 'NIL) …
Run Code Online (Sandbox Code Playgroud)

lisp linked-list list common-lisp cons

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

内置不区分大小写的字符串=

我需要比较两个字符串,以忽略该assoc :test函数的大小写。我知道我可以像这样轻松编写函数:

(defun cistring= (str1 str2)
  (string= (string-downcase str1)
           (string-downcase str2)))
Run Code Online (Sandbox Code Playgroud)

但是我想知道:是否有内置的不区分大小写的string=也许我只是找不到?

lisp common-lisp

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

合并列表列表并循环返回

我试图将所有列表列表合并为一个.

到目前为止,这是我的代码:

(DEFUN DESCRIPTION (BLOCK)
    (loop initially (setf result '())
        for desc in (DESC2 BLOCK) 
        do (append result desc)
        finally (return result)
        )
)
Run Code Online (Sandbox Code Playgroud)

函数(DESC2 BLOCK)返回以下内容:

((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL) (SUPPORTED-BY B2) (SUPPORTED-BY B3))
Run Code Online (Sandbox Code Playgroud)

我只需要函数返回一个合并列表:

(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多方法并且已经研究了很多.我很抱歉,但我不完全了解LISP语言,如果你能帮助我,我将不胜感激!

先感谢您!

lisp merge list common-lisp

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

Common Lisp:flush标准输出

试图学习lisp(我猜emacs一起).我想知道如何清除输出并更换它.可以在LISP repl或emacs缓冲区中.
类似于python中的以下内容.

def go(r):
    for i in range(r):
        sys.stdout.write("\rDoing %i" % i)
        sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

lisp stdout common-lisp

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

文件在clisp中加载困难

所以我想学习Lisp,我在Windows 10 PC上下载了GNU CLISP 2.49.我已经在文件中写了一些代码,我想用(load "example.lisp")命令从CLISP终端加载它.

我应该把文件放在哪里,以便能够在clisp中加载它?

我安装了clisp C:\clisp-2.49.

lisp load clisp common-lisp

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

整数lisp的最小值

我试着在lisp中检索整数的最小值.我发现

most-negative-fixnum 
Run Code Online (Sandbox Code Playgroud)

应该代表最低可能数字的变量.无论我尝试用它做什么都会引发错误

变量`MOST-NEGATIVE-FIXNUM'未绑定.

有没有具体的方法如何在lisp中获取变量的值?我对此的研究没有结果.

谢谢

lisp common-lisp

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

为什么make-counter过程包含两个lambda定义?

我正在试图理解制造计数器程序的方案代码.这是一个更高阶的程序(程序输出另一个程序),我坚持下去.

(define make-counter
  (lambda (n)
    (lambda () 
      (set! n (+ n 1))
      n)))

(define ca (make-counter 0))
(ca)
(ca)
Run Code Online (Sandbox Code Playgroud)

它按预期分别输出1和2.为什么我们需要2个嵌套程序?它们的功能分别是什么?

如果有人详细解释,我将不胜感激.谢谢你们.

lisp scheme counter closures

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

LISP FUNCTION - 返回第一个元素中较大的列表的数字计数

我想解决一个返回NUMBER(计数)数字的lisp函数,这些数字大于列表中的第一个数字.列表是一个数字的线性列表.

(defun foo (lst) 
  (cond ((null lst) 0)
        (car = k)
        ((> (car lst) k) 
        (1+ (foo (cdr lst))))
  (T (foo (cdr lst)))))
Run Code Online (Sandbox Code Playgroud)

我的问题是我不能保留第一个元素并将其与其他元素进行比较.

lisp common-lisp

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

找到原子的位置 - 如果不存在则返回nil

我试图在列表中找到原子的位置.

预期成绩:

(position-in-list 'a '(a b c d e)) 给出0

(position-in-list 'b '(a b c d e)) 给出1

(position-in-list 'Z '(a b c d e)) 没有.

我有一个函数,当项目在列表中时,正确地给出位置:

(defun position-in-list (letter list)
  (cond
    ((atom list)            nil)
    ((eq (car list) letter) 0)
    (t                      (+ 1 (position-in-list letter (cdr list))))))
Run Code Online (Sandbox Code Playgroud)

问题是,当项目不存在时它不返回nil,就好像它达到(atom list)nil它会给出这个错误:*** - 1+: nil is not a number当它取消堆栈时,它会尝试将值添加到nil.

有没有办法调整这个功能(保持相同的结构),以便nil当项目不在列表中时正确返回?

笔记:

  • 我知道库中有一个position函数,但我不想使用它.

  • 我知道我的问题与类似,但我上面提到的问题没有得到解决.

*编辑* 感谢大家的答案.虽然我没有必要的知识来理解你提到的所有建议,但它很有帮助.

我找到了另一个解决我问题的方法:

(defun position-in-list (letter liste)
   (cond …
Run Code Online (Sandbox Code Playgroud)

lisp recursion position common-lisp

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

标签 统计

lisp ×10

common-lisp ×8

list ×2

scheme ×2

clisp ×1

closures ×1

cons ×1

counter ×1

lexical ×1

linked-list ×1

load ×1

merge ×1

position ×1

recursion ×1

scope ×1

stdout ×1