小编use*_*063的帖子

常见的Lisp异常处理(条件和重新启动)

我已经阅读了几天时间的通用Lisp“ Practical Common Lisp”异常处理一章,但是现在我对示例和解释感到困惑,与此同时,我尝试编写一些测试示例,但是由于我不起作用意料之中,以下是我的测试样本。

  1. 条件定义

    (define-condition evenp-error (error) 
      ((text :initarg :text :reader text)))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 定义打印奇数的函数

    (defun filter-evenp (lst)
      (dolist (x lst)
        (if (not (evenp x)) 
          (print x)
          (error 'evenp-error :text x))))
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重启功能

    (defun skip-evenp (c) (invoke-start 'skip-evenp))
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重新启动案例

    (restart-case (filter-evenp (list 1 2 3 4 5))
      (skip-evenp () nil))
    
    Run Code Online (Sandbox Code Playgroud)

我要做的就是打印所有奇数并跳过偶数错误,我的样本出了什么问题?有人帮忙吗?提前谢谢了!!

exception restart common-lisp conditional-statements condition-system

5
推荐指数
2
解决办法
1338
查看次数

Common Lisp -----应该是一个lambda

(defun foo(x y)(format t "X: ~a~%" x))
Run Code Online (Sandbox Code Playgroud)

上面的功能工作正常,但是

(defun foo(x y) ((format t "X: ~a~%" x) (format t "Y: ~a~%" y)))
Run Code Online (Sandbox Code Playgroud)

它提示

"*** - SYSTEM::%EXPAND-FORM: (FORMAT T "X: ~a~%" X) should be a lambda"
Run Code Online (Sandbox Code Playgroud)

如果我想单独打印参数x,y,如何修复编译错误?

lisp common-lisp syntax-error

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

什么是交互式REPL IO功能?

我已经学习了Common Lisp一段时间了,有一个问题我遇到过如何实现这样一个函数,允许用户输入一些单词,直到用户输入退出.(实际上我想知道哪种命令行交互功能API符合这样的要求)

例如,在REPL中提示"请输入一个单词:",然后将用户输入存储到全局 my-words中,当用户输入"exit"时退出.

io common-lisp read-eval-print-loop

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