CLisp
青水
高级程序员,系统分析师
展开
-
clisp 之 JSON解析 V2
简单实现json字符串 解析为lisp 对象。原创 2022-06-03 21:55:17 · 177 阅读 · 0 评论 -
2021-02-06
(defun as-string (x) (format nil "~a" x));;;;日期转化;支持对象(按交易日):; M-1,M1,M2,M3...MN; W-1,W1,W2,W3...WN;按交易日处理;日期表示每月第N个交易日或每周第N个交易日(defun cvt-to-date (x) (let* ((s (as-string x)) (s0 (elt s 0)) (ds (parse-integer (su.原创 2021-02-06 15:33:03 · 81 阅读 · 2 评论 -
记一“坑“
现象: 从一列表中,查询一子列表(用 remove-if or remove-if-not) ,然后遍历排序子列表,再处理子列表中的数据,同时需要从原始列表中查找(find)数据。 因为子列表的数据是从原始列表中提取出来的,所以子列表是原列表的子集,find操作肯定可以成功,但却发现有有find结果为NIL现象。结论: 一番调试折腾之后发现:sort操作破坏了原列表的结构。猜测原因是子列表是通过原列表得到的,两者可能共用了部分数据结构,导致看似无头的lst2却影响到了了l...原创 2020-12-12 17:00:40 · 71 阅读 · 0 评论 -
CLISP 调用 Windows API 生成GUID
(defpackage :whj.guid (:use :cl :ffi) (:export #:GUID #:NEW-GUID))(in-package :whj.guid)(def-c-struct GUID (d1 uint32) (d2 uint16) (d3 uint16) (d4 (c-array uint8 8)))(def-call-out CoCreateGuid (:name ".原创 2020-11-23 22:38:48 · 249 阅读 · 0 评论 -
JSON解析简单实现 之三
近来对读取器的功能有新的理解,再次利用读取器实现 JSON解析。感觉效果不错,解决了之前的一些问题。运行环境:clisp 2.49附:;json convert;WHJ.20200510;["ok1","ok2","OK3"];{"ok":1,"ok2":2,"ok3":3};[{"ok":1,"ok2":2,"ok3":3},"ok1","ok2","OK3",{"ok1":1,"ok2":2,"ok3":[3,4],"ok4":"5"}](defmacro with-j.原创 2020-05-10 21:22:28 · 179 阅读 · 0 评论 -
关于 EVAL-WHEN 的一点理解
EVAL-WHEN:special operator功能:控制求值时间点。使用方式 :(EVAL-WHEN (opt-list) body)opt-list: 包括 :compile-toplevel ,:load-toplevel, :execute三个选项body: 任意合法lisp表达式--------------------------------------...原创 2020-02-05 00:20:24 · 202 阅读 · 0 评论 -
JSON解析简单实现 之二
之前曾写过一次JSON解析,借助了读取器的功能,可惜效果不太令人满意。今天闲来无事,实现原生解析。本次实现有以下缺限: 1、没有充分优化代码 2、没有考虑转义字符解析(待后续实现);JSON 解析 WHJ.V1.20200119;-----------------------------------------------------------------------...原创 2020-01-19 12:57:01 · 247 阅读 · 0 评论 -
lisp数字格式化
1)、按任意进制(2~36)输出;比如按3进制输出(format t "~3r" 34) ;10212)、指定宽度输出;8位宽度(format t "~3,8r" 34); 10213)、指定宽度,并设置填充字符;8位宽度,#填充(format t "~3,8,'#r" 34) ;####10214)、输出指定宽度及对齐方式;左对齐(format ...原创 2020-01-17 22:35:09 · 570 阅读 · 0 评论 -
getdatestring.lisp
(defun universal-time-to-timestamp (universal-time) "universal-time convert to unix timestamp" (- universal-time (encode-universal-time 0 0 0 1 1 1970 0)))(defun get-timestam...原创 2019-12-08 17:46:30 · 255 阅读 · 0 评论 -
例.restart-case,handler-bind ,handler-case
restart-case,handler-bind用法。样例代码:(defun get-age (text) (restart-case (cond ((symbolp text) (error 'invalid-integer :msg "Invalid integer")) ((and (stringp tex...原创 2019-09-01 21:29:55 · 198 阅读 · 0 评论 -
clisp 实现http请求 (2) (未完成)
暂存代码。1、未实现post,仅实现了 get2、未实现 https运行环境:win7 clisp 2.49(in-package :cl-user)(use-package :socket);主机信息(defstruct hostinfo host port)(defstruct urlinfo hostinfo url https-p);tool: 生...原创 2019-08-31 23:41:33 · 163 阅读 · 0 评论 -
【CLisp】JSON解析简单实现
使用说明:(defvar json-string "[a,b,c:{c:1,d:2},e]")(print (json-cvt json-string))解析结果:实现:;;;; json convert;;;; WHJ.20180916(defun define-macro-character-function (char-end) (lambda (st...原创 2018-09-18 21:06:50 · 184 阅读 · 0 评论 -
【clisp】实现读取CSV文件
csv文件: 1、每行数据集各元素以逗号间隔 2、若单元素中有逗号,则整个元素以双引号括起来为一个单元素 3、若双引号元素中又有双引号,则需要转义双引号为 \"以clisp为例实现 csv 文件读取,实现如下:read-csv-file: 可以直接读取一个csv文件,并以列表形式返回数据。split-c...原创 2018-08-25 15:41:22 · 663 阅读 · 3 评论 -
【lisp】用 defclass 构造类似 defstruct 宏 : define-class 宏
defstruct 宏构造对象比 defclass 构造宏在定义对象时要明显简单,因为 defstruct 实现了常用的构造方法,比较 make-instance ,print-object,字段 reader and writer等等,可以大幅提高编码效率,另一方面 前段时间在构造二叉树时,发现 struct 不能用来方便存储左右支村,因为defstruct 定义的对象在显示(print)时会展...原创 2018-05-23 22:48:34 · 578 阅读 · 0 评论 -
CLISP 之 创建HTTP GET、POST、HEAD请求
;;;; WHJ.20180504;;;; 创建HTTP GET、POST、HEAD测试 及 cookie 携带,自定义 Header; 注:首行要注意大写(in-package :cl-user)(defun reload nil (load "h:/lisptool/httpcli.lisp"))(defconstant +host-ip+ "localhost")(defconstant ...原创 2018-05-05 16:48:05 · 296 阅读 · 0 评论 -
Lisp一瞥:增强型变量Symbol
Lisp一瞥:增强型变量Symbol转自:Lisp一瞥:增强型变量SymbolAuthor:Kevin LynxDate:3.21.2011Contact:kevinlynx at gmail dot comNote本文描述的Lisp主要指Lisp的方言Common Lisp。变量,是所有编程语转载 2016-01-02 17:03:34 · 680 阅读 · 0 评论 -
CLISP 之变量删除与重建的影响
1、不用defvar 与defparameter 创建的变量,不支持动态绑定。(psetq x nil)(defun print-x nil (format t "x=~a~%" x))test: (print-x); nil (let ((x 123)) (print-x));nil2、在 第 1 步的基础上执行 (defvar x nil) 后,变原创 2017-10-15 18:10:41 · 291 阅读 · 0 评论 -
ext:open-http/with-http-input 指定编码
通过重新绑定 symbol-macro *default-file-encoding*,指定UTF8编码下载指定页:(letf ((*default-file-encoding* charset:utf-8))(EXT:with-http-input (in "http://www.sina.com") ; GET(loop while (listen in)collect (re原创 2018-01-07 15:53:22 · 3118 阅读 · 0 评论 -
clisp 之rplaca,rplacd
rplaca and rplacd 是内建系统函数,存在于package common-lisp.依赖于副作用: rplaca 相当于 (setf (car lst) val) (rplaca lst val) rplacd 相当于 (setf (cdr lst) new-lst) (rplacd lst new-lst)原创 2018-01-17 22:27:20 · 294 阅读 · 0 评论 -
二叉排序树算法练手之CLISP实现
(in-package :cl-user)(defun reload () (load "h:/lisptool/btree.lsp"))(defvar *rootnode* nil)(defmacro node-level (node) `(getf ,node :level))(defmacro node-left (node) `(getf ,node :left))(defmacro no...原创 2018-03-04 22:26:52 · 148 阅读 · 0 评论 -
二叉排序树算法练手之CLISP实现【通用版】
(in-package :cl-user)(defun reload () (load "h:/lisptool/btree.lsp"))(defmacro node-level (node) `(getf ,node :level))(defmacro node-left (node) `(getf ,node :left))(defmacro node-right (node) `(getf ...原创 2018-03-05 23:46:21 · 349 阅读 · 0 评论 -
二叉排序树算法之CLISP实现 改进版【通用版】
主要改进:1、转换节点数据结构,list =>clsss node2、添加节点父元素(in-package :cl-user)(defun reload () (load "h:/lisptool/btree.lsp"))(defclass node () ((node-value :initarg :value :accessor node-value :initform ...原创 2018-03-07 22:15:37 · 222 阅读 · 0 评论 -
lisp运用初悟
经过长达三年多的lisp反复学习及实践,掌握了lisp的语法,常用api,win32 api /c++ dll 调用接口FFI api ,IO,正则库cl-ppcre,异常处理(restart-case,handler-bind,handler-case等),代码组织结构package,对象系统CLOS 等,可以根据业务需要熟练编写脚本工具,是目前日常工作中主要使用的脚本之一(另一个是pe...原创 2018-03-19 23:59:45 · 507 阅读 · 0 评论 -
redis 之 clisp 接口库
;##########################################################################;;;; redis-lib.pkg(in-package :cl-user)(defpackage :whj-redis (:nicknames :redis :redis-lib) (:use :common-lisp :ext :sock...原创 2018-04-01 13:22:30 · 193 阅读 · 0 评论 -
解码:gzip压缩数据后再base64编码的数据流
(in-package :cl-user);样例数据 (defvar str"H4sIAAAAAAAAAE2STUvDQBCG/0puOdXdpIGkMG7ZJtMabDdhsxU85aBFCtqCgviTPHlQKPhxEEFBLx69+AsELx49iLvdfPSyPO/MO7szw0L/4uTYOZ+dns2Xi23X26KuM1scLA/niyNn23FHg123zyCbKgY7yBOUD...原创 2018-04-05 22:52:53 · 6370 阅读 · 0 评论 -
HTTP 之 OPTIONS 请求
OPTIONS: 用来询问服务器支持哪些方法。HTTP1.1 规范要求,必须包含 HOST 头部,服务器通过 Allow 头关返回服务器支持的方法, 一般包体为空。常规方法有 GET,POST,HEAD,TRACE,OPTIONS,默认情况下 IIS 不支持 PUT,DELETE。CLISP 实现如下:(defun http-options (url) (let ((host nil)(rel-...原创 2018-05-10 21:49:55 · 1800 阅读 · 0 评论 -
HTTP POST 提交数据之 Content-Type: multipart/form-data
Content-Type: multiple/form-data 可以用来一次性提交较为复杂的数据结构,比如常规表单,多个文件等。通过 boundary 定义内容分割标志和内容长度行 来综合控制包体的内容划分。定义一般为:POST RELATIVE_URL HTTP/1.1HOST: host-portContent-length:content-lengthContent-Type:multi...原创 2018-05-10 22:11:09 · 16308 阅读 · 4 评论 -
CLISP special
special含义:创建变量的动态绑定。let 创建lexical var. fun parameter 创建lexical var .如果正好函数参数与动态变量同名,则转化为动态变量。1、为了将let创建的lexical var转化为使用动态绑定,则需要声明 (declare (special var)) .2、若已声明为动态绑定变量。那么在接下来的lexical 作用域原创 2015-07-25 09:52:31 · 635 阅读 · 0 评论