小编Kot*_*pou的帖子

ltk常见的Lisp鼠标位置

我正在Common Lisp中制作一个简单的applet,我想使用鼠标移动来控制它。我对窗口使用LTK。我找不到任何可检索鼠标位置的函数。例如,Emacs Lisp具有(鼠标像素位置)。我在rosetta代码上找到了,但是没有Common Lisp条目。我能做什么?

ltk common-lisp

5
推荐指数
1
解决办法
94
查看次数

Lisp:添加列表列表的各个元素

假设我有一个清单:

((1 2 3) (8 4 7) (41 79 30) (0 8 5))
Run Code Online (Sandbox Code Playgroud)

我想做这个:

(1+8+41+0 2+4+79+8 3+7+30+5) = (50 93 45)
Run Code Online (Sandbox Code Playgroud)

我找到了一个丑陋的解决方案:

(defun nested+ (lst)
  (let ((acc nil))
    (dotimes (i (length (first lst)))
      (push (apply #'+ (mapcar #'(lambda (a) (nth i a)) lst)) acc))
    (reverse acc)))
Run Code Online (Sandbox Code Playgroud)

它似乎适用于我的目的,但我想这是缓慢而且没有lispy.什么是正确的方法?

lisp nested common-lisp

1
推荐指数
2
解决办法
312
查看次数

Lisp案例具有不同的等式谓词

作为Tic Tac Toe玩机器人的一部分,我需要一个功能来评估瓷砖与点的组合.代码看起来像这样:

(case combination
    ("EEEEE" 0)
    ("EEEEP" 1)
    ("EEEPE" 1)
    ("EEEPP" 2)
    ("EEPEE" 1)
    ("EEPEP" 2)
    ("EEPPE" 2)
    ("EEPPP" 3)
    ("EPEEE" 1)
    ("EPEEP" 2)
    ("EPEPE" 2)
    ("EPEPP" 3)
    ("EPPEE" 2)
    ("EPPEP" 3)
    ("EPPPE" 3)
    ("EPPPP" 4)
    ("PEEEE" 1)
    ("PEEEP" 2)
    ("PEEPE" 2)
    ("PEEPP" 3)
    ("PEPEE" 2)
    ("PEPEP" 3)
    ("PEPPE" 3)
    ("PEPPP" 4)
    ("PPEEE" 2)
    ("PPEEP" 3)
    ("PPEPE" 3)
    ("PPEPP" 4)
    ("PPPEE" 3)
    ("PPPEP" 4)
    ("PPPPE" 4)
    ("PPPPP" 5))
Run Code Online (Sandbox Code Playgroud)

(这不是讨论这种方法的价值的地方,因为它被用于与问题无关的原因)

问题是case使用的谓词对于不是同一个对象的相同字符串不返回true(如果是eq或eql则很难找到).你怎么能改变它?

编辑:我通过将字符串转换为相应的二进制数来解决原始问题,可以使用eql进行比较或用作列表中的索引.

equality predicate common-lisp

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

标签 统计

common-lisp ×3

equality ×1

lisp ×1

ltk ×1

nested ×1

predicate ×1