本帖最后由 ggdlove 于 2013-12-17 00:31 编辑
利用上述的定义呢,就可以完成下面两个程序。
1)二进制表的按位异或- ;;按位异或************************************************************************
- ;;位数不够时,若mode为1,则补1,不为1则补0
- (defun BIN_XOR(bin1 bin2 mode / bin *error*)
- ;;定义局部错误处理函数
- (defun *error*(msg)
- (princ "\n; 错误: 参数类型错误: bin: ")(princ bin)
- (princ)
- )
- ;;输入值检验
- (or (and (= (type bin1) 'LIST);;类型为表
- (>= (length bin1) 1);;元素数量大于等于1
- (apply 'and (mapcar '(lambda(x) (= (type x) 'INT)) bin1));;所有元素必须为整数
- (apply 'and (mapcar '(lambda(x) (and (>= x 0) (<= x 1))) bin1));;所有元素必须在[0,1]区间内
- )
- (progn
- (setq bin bin1)
- (exit)
- )
- )
- (or (and (= (type bin2) 'LIST);;类型为表
- (>= (length bin2) 1);;元素数量大于等于1
- (apply 'and (mapcar '(lambda(x) (= (type x) 'INT)) bin2));;所有元素必须为整数
- (apply 'and (mapcar '(lambda(x) (and (>= x 0) (<= x 1))) bin2));;所有元素必须在[0,1]区间内
- )
- (progn
- (setq bin bin2)
- (exit)
- )
- )
- ;;读取补位模式
- (if (= mode 1)
- (setq mode 1)
- (setq mode 0)
- )
- ;;位数不对的补齐
- (while (/= (length bin1) (length bin2))
- (if (< (length bin1) (length bin2))
- (setq bin1 (cons mode bin1))
- (setq bin2 (cons mode bin2))
- )
- )
- ;;按位异或运算
- (mapcar '(lambda(x y)
- (if (/= x y)
- 1
- 0
- )
- )
- bin1
- bin2
- )
- )
2)二进制表的按位循环移动- ;;按位循环移动,当移动位数为正时表示左循环移,为负时表示右循环移*******************************
- (defun BIN_RMOVE(bin dir / err *error*)
- ;;定义局部错误处理函数
- (defun *error*(msg)
- (if err
- (progn
- (princ "\n; 错误: 参数类型错误: fixnump: ")
- (princ dir)
- )
- (progn
- (princ "\n; 错误: 参数类型错误: bin: ")
- (princ bin)
- )
- )
- (princ)
- )
- ;;输入值检验
- (or (and (= (type bin) 'LIST);;类型为表
- (>= (length bin) 1);;元素数量大于等于1
- (apply 'and (mapcar '(lambda(x) (= (type x) 'INT)) bin));;所有元素必须为整数
- (apply 'and (mapcar '(lambda(x) (and (>= x 0) (<= x 1))) bin));;所有元素必须在[0,1]区间内
- )
- (exit)
- )
- (or (= (type dir) 'INT) (progn (setq err T) (exit)))
- ;;若右移,即dir<0时,则将bin倒置
- (if (< dir 0) (setq bin (reverse bin)))
- ;;向左移动nn位
- (repeat (abs dir)
- (setq bin (append bin (list (car bin))))
- (setq bin (cdr bin))
- )
- ;;若右移,即dir为T,nn<0时,则再次将bin倒置
- (if (< dir 0) (setq bin (reverse bin)))
- ;;返回值
- bin
- )
温馨提示:
这两个程序是不定义符号位的。
|