setq setf
功能
这两个函数其实是一个,只是逻辑上用在不同的场合。
setq用于给symbol的reference设置,而setf用于设置list 或者 array的reference.
setq的使用
setq比较简单,避免了在使用set的时候用‘来阻止表达式求值。
> (setq x "hello")
"hello"
> x
"hello"
setf的使用
> (setq L '(a b (c d) e f g))
(a b (c d) e f g)
> L
(a b (c d) e f g)
> (setf (L 1) 'B)
B
> L
(a B (c d) e f g)
> (L 1)
B
>
setf用于设置list或者array的reference,上面的例子首先用setq设置了L, 其值是一个list
然后用setf 将B symbol赋给了L的第二个元素b
因为B是一个symbol,我们可以对它赋值,看下面的代码:
> (setq B "He")
"He"
> (L 1)
B
> (eval (L 1))
"He"
>
用eval将B的值取出来。
setf的复杂应用
下面这个例子来自官方文档:
(define (double x) (+ x x))
→ (lambda (x) (+ x x))(first double) → (x)
(last double) → (+ x x); make a fuzzy double
(setf (nth 1 double) '(mul (normal x (div x 10)) 2))(double 10) → 20.31445313
(double 10) → 19.60351563
首先定义了一个lambda表达式。
然后用setf把lambda表达式的body,也就是第二个元素设置成了list (mul (normal x (div x 10)) 2)
这个list用来计算随机数,并和2相乘。
这个例子演示了再define之后也可以通过setf来修改lambda表达式。
setq setf相关推荐
- setq 常驻内存lisp_常见Lisp中的set,setq和setf之间的区别?
What is the difference between "set", "setq", and "setf" in Common Lis ...
- python perl lisp,是否可能像python中的perl的lvalue或lisp的setf一样?
In lisp you can say: (setf (aref a 1) 5) In perl you can say: substr( $string, $start, $stop ) =~ s/ ...
- setf 使用方法
setf 语法: fmtflags setf( fmtflags flags ); fmtflags setf( fmtflags flags, fmtflags needed ); 函数setf() ...
- 一个很有意思的问题: 揭示了计算机程序问题的一般处理思路
2019独角兽企业重金招聘Python工程师标准>>> 一个很有意思的问题: 揭示了计算机程序问题的一般处理思路 === 问题标题: 如何统计汉字的字数? 问题内容: 我想统计: & ...
- emacs-w3m查看html帮助手册
<?xml version="1.0" encoding="utf-8"?> emacs-w3m查看html帮助手册 emacs-w3m查看html ...
- 给Lisp程序员的Python简介
给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...
- Common lisp编译成C的bin(二)
1.安装ecl#brew install ecl 2.配置ecl在~/.emacs加入:(setq inferior-lisp-program "ecl")(setq slime- ...
- python lisp_给Lisp程序员的Python简介
作者:Peter Norvig,译者:jineslong 这是一篇为Lisp程序员写的Python简介(一些Python程序员告诉我,这篇文章对他们学习Lisp也有帮助,尽管这不是我的本意).基本上, ...
- comon lisp标准_common Lisp学习笔记(十四)
14 Macros 宏通常通过defmacro来定义,它定义了怎样"翻译"出一个函数调用. 我们定义一个宏的时候说明一个函数调用应该翻译成什么,这个翻译称为宏展开(macro-ex ...
最新文章
- BCB 多线程的同步与协调
- Shell程序设计 | 文本处理工具 :正则表达式、grep、sed、awk
- IO-00. Hello World! (5)
- 牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!
- 找到的程序集清单定义与程序集引用不匹配
- Sql Server获取数据库名,表信息,字段信息,主键信息等
- Linux进程的管理与调度(六) -- Linux下1号进程的前世(kernel_init)今生(init进程)
- linux7不能使用yum,CentOS7.6无法使用yum命令,无法更新解决方法
- selenium-绕过登录
- Android中获取并设置屏幕亮度
- 三角诱导公式 两角和与差 二倍角公式 降幂公式 半角公式 万能公式 积化和差公式 和差化积公式
- scratch零基础
- 音视频从入门到精通——FFmpeg之swr_convert音频重采样函数分析
- 看看别人研究生在做什么,在看看自己---推荐《我这十年》-----一个研究生的自我总结
- 香港机房BGP线路有什么用
- Organization Chart
- 使用python抓取100张人脸图片
- 3 - 一元函数积分学
- vsftpd lftp
- [C# 网络编程系列]专题五:TCP编程
热门文章
- 今天来介绍怎么获取 3D 素材,进行 Cocos Creator 3D 游戏开发体验!
- mobilesdk实战(含代码)
- JavaScript中实现sleep睡眠函数的几种简单方法
- 什么是OpenDDS???What is OpenDDS???开源项目???
- 硬件工程师的“真实写照”~
- 数据填报分析一体化,这家省级投资集团节省70%人力
- html打印合并单元格边框不显示不出来,word合并单元格后打印没有边框
- 二叉排序树遍历二叉树打印简单图书管理系统
- 超实用的 Linux 高级命令,程序员一定要懂!
- qr分解实验 matlab,QR分解与最小二乘