I work out the questions by myself

Chapter 2


question 4.

(defun greater (x y)
    (if (> x y)
        x
        y
    )
)

question 5.

(a)

(defun enigma (x)
    (and (not (null x))
        (or (null (car x))
            (enigma (cdr x))
        )
    )
)
; to judge whether there is a nil in x

(b)

(defun mystery (x y)
    (if (null y)
        nil
        (if (eql (car y) x)
            0
            (let ((z (mystery x (cdr y))))
                (and z (+ z 1))
            )
        )
    )
)
; return the index of x in y (if not exist, return nil)

question 6.

(a) (car (car (cdr '(a (b c) d))))

(b) (or 13 (/ 1 0))

(c) (funcall (lambda (x y z) (list (car (funcall x y z)))) #'list 1 nil)

question 7.

; recursive version

(defun testlist (x)
    (if (not (listp x))
        nil ; not list, return nil
        (if (null x)
            nil ; is empty, return nil
            (if (listp (car x))
                t ; match the request, return true
                (testlist (cdr x)) ; recurisvely test the rest
            )
        )
    )
)
; iterative version

(defun testlist (x)
    (if (not (listp x))
        nil ; not list, return nil
        (if (null x)
            nil
            (let ((res nil))
                (dolist (obj x)
                    (if (listp obj)
                        (setf res t) ; res to record the judgement
                        nil
                    )
                )
                res ; return res
            )
        )
    )
)

question 8.

(a)

; iterative

(defun PrintDot (x)
    (do ((i 1 (+ i 1)))
        ((> i x) 'done)
        (format t ".")
    )
    (format t "~%")
)
; recursive

(defun PrintDot (x)
    (if (> x 0)
        (progn
            (format t ".")
            (PrintDot (- x 1))
        )
        nil
    )
)

(b)

; iterative

(defun testa (x)
    (if (not (listp x))
        nil
        (let ((res 0))
            (dolist (obj x)
                (if (eql obj 'a)
                    (setf res (+ res 1))
                )
            )
            res
        )
    )
)
; recursive

(defun testa (x)
    (if (not (listp x))
        nil
        (if (null x)
            0
            (let
                ((z (if (eql (car x) 'a)
                    1
                    0
                )))
                (setf z (+ z (testa (cdr x))))
                z
            )
        )
    )
)

question 9.

(a)

(defun summit (lst)
    (setf lst (remove nil lst))
    (apply #'+ lst)
)

(b)

(defun summit (lst)
    (if (null lst)
        0
        (let ((x (car lst)))
            (if (null x)
                (summit (cdr lst))
                (+ x (summit (cdr lst)))
            )
        )
    )
)

ANSI Common Lisp Practice - My Answers - Chatper - 2的更多相关文章

  1. ANSI Common Lisp Practice - My Answers - Chatper - 3

    Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体 ...

  2. 简体中文 — ANSI Common Lisp 中文版

    简体中文 - ANSI Common Lisp 中文版 简体中文¶

  3. ANSI Common Lisp 中文翻譯版 — ANSI Common Lisp 中文版

    ANSI Common Lisp 中文翻譯版 — ANSI Common Lisp 中文版 ANSI Common Lisp 中文翻譯版¶

  4. ANSI Common Lisp Learn

    It has been a long time that I haven't dealt with my blog. On one hand I was preparing the exams.On ...

  5. MAC 下用 Common Lisp 调试 OpenGL 程序

    MAC 下用 Common Lisp 调试 OpenGL 程序 环境搭建 运行环境: OSX 10.11.3 EI Capitan Common Lisp: SBCL 使用 SBCL, 首先要安装这几 ...

  6. 在windows上安装common lisp开发环境

    (2014.1写于CSDN的文章) 最近对lisp非常感兴趣,因此在google中搜索了“common lisp install windows”, 想装一个开发环境玩玩. 第一条结果就是 “Gett ...

  7. Common Lisp学习资源整理

    Lisp Hackers: Interviews with 100x More Productive Programmers Posted on June 26th, 2013 Lisp Hacker ...

  8. 一道Common Lisp 宏的练习题

    这是<ANSI Common Lisp>第10章“宏”的习题第6题: 定义一个宏,接受一变量列表以及一个代码主体,并确保变量在代码主体被求值后恢复 (revert)到原本的数值

  9. 搭建fedora开发环境 common lisp, c++, go

    第三方软件库: http://download1.rpmfusion.org/free/fedora/releases/25/Everything/x86_64/os/repoview/index.h ...

随机推荐

  1. NHibernate生成实体类、xml映射文件

    最近工作电脑装完win10后,之前使用的codeSmith安装不了,索性自己写一个. 界面比较简单,如下图: 第一行为Oracle数据库的连接字符串.连接成功后,填充表到第4行的下拉列表中. 第二行为 ...

  2. [Q&A] 在证书存储区中找不到清单签名证书

    方案1:右击项目属性->签名->为 ClickOnce 清单签名,将勾掉的选项去掉. 方案2:在签名中创建一个新的签名. 方案3:记事本打开相应的 csproj 文件,调整节点值.< ...

  3. Devexpress WPF Theme Editor 01

    在Devexpress中,已经有内置了很多主题样式.一般我们开发就已经够用了.但是随着客户的需求提高..我们要自己手动写一些样式这些的, 那么Devexpress 已经提供一个专门这样的工具. 下载地 ...

  4. JS基础之对象

    JS中一切皆为对象,这是一句常说的话.了解JS对象,从这句话开始吧.JS中的基本数据类型如number,bool,字符串,数组,null,undefined等等都是对象. 对象的本质: 带有属性和方法 ...

  5. ASP.NET WEBAPI 的身份验证和授权

    定义 身份验证(Authentication):确定用户是谁. 授权(Authorization):确定用户能做什么,不能做什么. 身份验证 WebApi 假定身份验证发生在宿主程序称中.对于 web ...

  6. WindowsAPI调用和OCR图片识别

    傻了吧唧的装双系统.成功的干崩了原本的系统.现在重装VS.闲的没事胡扯几句. WindowsAPI在每一台Windows系统上开放标准API供开发人员调用.功能齐全.在这里只介绍三个部分. 1.利用A ...

  7. javascript如何设置DIV背景色为随机色

    随机色有两种格式: 效果预览:http://wjf444128852.github.io/DEMOLIST/JS/test/index.html 1.rgb(xxx,xxx,xxx) 2.#xxxxx ...

  8. kmdjs指令大全

    调试 通过下面方式,可以输出kmdjs声称的类: <script src="../dist/kmd.js?debug" data-main="js/main&quo ...

  9. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(二)鹰眼模块

    讲解GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...

  10. ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579

    给esri中国的客服打电话被告知,是一直存在这个bug,arcgis10.2对应的oracle数据库版本要用11.2.0.3及以上的: 1.数据库升级可以用打补丁的当方式. 2.直接重装,我这里是直接 ...