• clisp的一些function


    
    ;; example: (write (A-Z :start (+ 65 1) :end 87))
    (defmacro A-Z (&key (start 65) (end 90))
      (let* ((s-start (gensym))
    	 (s-end (gensym))
    	 (s-start start)
    	 (s-end end))
      	`(loop for i from ,s-start to ,s-end
    		collect (code-char i))))
    
    (defmacro A-Z (&key (start 65) (end 90))
      (let ((s-start (gensym))
    	(s-end (gensym)))
        `(let ((,s-start ,start)
    	   (,s-end ,end))
           (loop for i from ,s-start to ,s-end
    	     collect (code-char i)))))
    
    
    (defun prime-p (n)
      "判读n是否为素数"
      (when (> n 1)
        (do ((i 2 (1+ i)))
    	((= i n) t)
          (when (zerop (mod n i))
    	(return nil)))))
    
    (defun typeof (obj)
     "return the type of OBJ"
     (typecase obj
      (list 'list)
      (number 'number)
      (array 'array)
      (function 'function)
      (string 'string)))
    
    (defun our-filter (lst fn)
      ;; 这个过滤器感觉更 remove差不多
      (let ((res nil))
        (dolist (el lst)
          (let ((is (funcall fn el)))
            (if (not is) (push el res))))
      (nreverse res)))
    
    
    (defun _sort (lst)
      ;;; 这是一个默认从小到大的排序函数
      ;;; > (setf a '(1 3 2))
      ;;; (1 3 2)
      ;;; > (_sort a)
      ;;; (1 2 3)
      ;;; > a
      ;;; (1 2 3)
      (let ((len (length lst)))
        (do ( (i 0 (+ i 1)) ) ( (not (< i len)) )
          (do ( (j 0 (+ j 1)) ) ( (not (< j (- len 1 i))) )
            (let (
                  (a (nth j lst))
                  (b (nth (+ j 1) lst))
                 )
              (and (> a b)
                   (setf (nth (+ j 1) lst) a
                         (nth j lst) b
                    )))))) lst)
    
    
    (defun distinct (lst)
      ;;; 去除重复数据
      ;;; > (distinct '(1 2 3 2 1 6))
      ;;; (1 2 3 6)
      (let ((res '()))
        (dolist (el lst)
          (if (not (member el res))
            (setf res (append res (cons el nil)))
          )) 
      res))
    
    (defun our-push (lst &rest addData)
      ;; 返回新的lst
      ;; > (our-push '(1 23) 'name "hello" '(a bc))
      ;; (1 23 NAME "hello" (A BC))
      (dolist (el addData)
        (setf lst (append lst (cons el nil)))) 
      lst)
    
    (defun our-length (lst)
    ;;; 这个函数返回一个lst的长度
      (if (null lst)
          0
          (+ 1 (our-length (cdr lst)))
      ))
    
    (defun our-qa ()
    ;;; 一个询问1+1等于几的函数
      (format t "1+1= ")
      (let ((a (read)))
        (if (and (numberp a) (= a 2))
          'yes
          (our-qa)
        )
      ))
    
    (defun null-list (lst)
    ;;; 若果是空表返回 t
      (if (and (listp lst) (null lst))
          t))
    
    (defun our+ (numberlist)
    ;;; 这个函数会对 一个全是数字的列表进行求和
    ;;;> (our+ '(1  2 3 "233"))
    ;;;6
      (let ( (firstNumber (car numberlist)) )
        (if (or (null numberlist) (null (numberp firstNumber)))
          0
          (+ firstNumber (our+ (cdr numberlist)))
        )
      )
    )
    
    
  • 相关阅读:
    asp.net禁用頁面緩存
    SQL排序方法,EXEC法和CASE WHEN法
    Web Service 基础连接已经关闭的解决方案
    用CSS写TABLE边框
    SQL2000分页存储过程,针对表,2005有自带的row_number
    GridView RowCommand事件中取得當前行
    取得Repeter中數據項,如TR
    FireFox自动撑高层解决方案
    PostgreSql 添加语言语法
    CSS设置图片居中
  • 原文地址:https://www.cnblogs.com/ajanuw/p/8465369.html
Copyright © 2020-2023  润新知