继学录
易经曰:通其变,使民不倦。引颜师古注:此易下系之辞也,言通物之变,胡能乐其器用,不解倦也。不才私度其意,白话言之:人物一理,应明其格,顺其兴至,克尽其用,上下一体,俱不倦而事可毕矣 ...
易经曰:通其变,使民不倦。引颜师古注:此易下系之辞也,言通物之变,胡能乐其器用,不解倦也。不才私度其意,白话言之:人物一理,应明其格,顺其兴至,克尽其用,上下一体,俱不倦而事可毕矣 ...
Fluid Binding是Chez另一个扩展,这个名词不太好翻译,我想想暂时就叫易变绑定吧,如果有更好的翻译请在文后的评论中尽情发表。 先看看该语法描述: (fluid-let ((var expr) …) body1 body2 …) returns: the values of the body body1 body2 … libraries: (chezscheme) ...
rec语法是Chez Scheme中一个非常有用的扩展,在不依赖外部变量进行递归时将很有用,可以减轻代码且使代码更加容易阅读。 这是语法描述: (rec var expr) syntax returns: value of expr libraries: (chezscheme) ...
Gossip是一种一致性协议,在系统设计和开发当中有着广泛的应用,网上有一些开源实现,但是并不好用有些甚至出现了一些bug,于是乎,花了一些时间,动手写了一个,目前已经在公司内部运行了几年,效果良好,并且已经开源在Github上,以飨各位。 特点: API简洁 支持3种事件: UP DOWN JOIN 基于Vert.X 引入: <dependency> <groupId>net.lvsq</groupId> <artifactId>jgossip</artifactId> <version>1.3.2</version> </dependency> 一个简单的例子: int gossip_port = 60001; String cluster = "gossip_cluster"; GossipSettings settings = new GossipSettings(); settings.setGossipInterval(1000); try { String myIpAddress = InetAddress.getLocalHost().getHostAddress(); List<SeedMember> seedNodes = new ArrayList<>(); SeedMember seed = new SeedMember(); seed.setCluster(cluster); seed.setIpAddress(myIpAddress); seed.setPort(60001); seedNodes.add(seed); gossipService = new GossipService(cluster, myIpAddress, gossip_port, null, seedNodes, settings, (member, state) ->System.out.println("member:" + member + " state: " + state)); } catch (Exception e) { e.printStackTrace(); } gossipService.start(); 详细介绍请看 => 项目地址 ...
本文在于解答LeetCode中的第二题,问题的描述可参见 两数相加 Golang的实现: /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { result := &ListNode{} nodes := []*ListNode{} var carry = 0 for { node, c := add(l1, l2, carry) carry = c if node != nil { nodes = append(nodes, node) if l1 != nil && l1.Next != nil { l1 = l1.Next } else { l1 = nil } if l2 != nil && l2.Next != nil { l2 = l2.Next } else { l2 = nil } if carry > 0 && (l1 == nil && l2 == nil) { nodes = append(nodes, &ListNode{Val:carry}) } } else { break } } for i, n := range nodes{ if i == 0 { result = n } if i + 1 < len(nodes) { n.Next = nodes[i + 1] } } return result } func add (n1 *ListNode, n2 *ListNode, carry int) (*ListNode, int) { node := &ListNode{} if (n1 == nil && n2 == nil) { return nil, 0 } if n1 == nil { n1 = &ListNode{Val : 0} } if n2 == nil { n2 = &ListNode{Val : 0} } sum := n1.Val + n2.Val + carry carry = 0 if sum > 9 { carry = 1 sum = sum - 10 } node.Val = sum return node, carry } 下面提供Scheme版本的实现【(1 0) + (9 1 2) = (0 2 2)】,为了简单起见,与题目要求稍有不同,这里采用list,而不是题目要求的链表,但实际上应是一样的。比较之下可以看出,相对而言,Scheme语言的实现更加简短优雅,得益于其强大的表达能力 ...
最近同事参加公司的黑客竞赛,有一道题目与钱币组合问题比较像,记得SICP里面有所描述,正好不是很忙,就试着实现该算法,用Scheme语言开发。 ...
Swagger或者叫OpenAPI是一套完备且通用的API标准,本文并不介绍Swagger的用法,仅针对某些场景需要扩展(扩展需要以"x-")该如何开发做紧要的介绍。 ...
秦始皇即得天下,同度量衡,皆因各国差别太大,此种说法多见于历史课本,但有问题。有成语叫朝秦暮楚,如若差异太大,必难去秦适楚。周姬以末交通殷繁,如平原君广纳异国宾客;苏秦上书于七国;荀子遍游天下者皆可证各国文字并无大乖。 《史籀篇》文首盖云“太史籀书”,人多误以太史籀所作,如此便望文生义了。太史乃官职,王国维先生引《说文》解释,籀即读,读即籀书。另太史籀书乃周世之成语,绝非人名。 近日得闻汉文帝霸陵被发现,自元以降,谬传霸陵在凤凰嘴,如今得以确认,此案终于勾销。《汉书.文帝纪》载:“乙巳,葬霸陵”。凤凰嘴也好,江村也罢,在史书上只是一行字。周知公元前221年,秦始皇统一六国,当时有个“卫国”并未统一,但是史书不会这么写:“前221年,秦始皇统一六国,卫国除外。”;960年,宋朝统一中原,但是现在的江浙地区还存在一个“吴越国”,过了18年才献土入宋,史书也不会这么写:“960年,宋有中国,吴越除外”。卫国和吴越都只是史书上的一行字,这就是历史的看法。1949年,共产党统一了中国,台湾孤悬一隅,其处境和前者比照并无二致,将来史书上的台湾也只是一行字。
M -> Alt(option) S -> Shift 快捷键 用途 M-v 上(后)一屏 C-v 下(前)一屏 C-x 0 关闭当前窗口 C-l 重绘屏幕,将光标所在行置于屏幕中央 C-u(M-num) 重复执行。C-u 8 C-f(M-8 C-u) 会把光标往前移动8个字符 C-x C-f 查找或者新建一个文件 C-x C-b 列出缓冲区。 C-x 1 关闭缓冲区列表。将需要删除的缓冲区标“d”(选中,按d),然后按“x”执行删除标记的所有缓冲区 C-x b 切换缓冲区,输入缓冲区名字,RET C-x C-q 开启或者关闭buffer的只读模式 C-x k 关闭当前缓冲区 C-x C-s 保存当前文件 C-x s 保存所有文件 C-x h 全选 M-w 复制 C-y 粘贴 C-w 剪切 C-s 往前搜索 C-r 往后搜索. DEL 也可以往后搜索, C-/ undo M-x calendar 打开日历。按 q 退出。【g d 到指定日期】【. 到今日(不居中)】【> 前一个月】【< 后一个月】 M-x *-mode 选择Major mode M-x shell 运行一个shell M-x eshell 运行一个eshell C-a 移到行首 C-a C-k、C-S-backspace 删除整行 C-u 5 C-S-backspace、M-5 C-S-backspace 删除后5行,不加数字则删除4行(默认),如果数字为负数,则往前删 C-g 停止当前的命令 C-k 删除从光标位置到行尾所有字符 M-% 查找及替换。输入要被替换的词,回车,然后输入要替换的词,再回车。输入==y==替换并跳到下一个,输入==n==忽略并跳到下一个,输入==q==结束, 输入 ==!== 替换剩下的全部 M-x occur RET xxx RET 新开一个窗口来列出匹配的行,点击就会跳转到对应的位置,编程时有用 C-x C-t 当前行与上一行换位置 Org-Mode 快捷键 用途 C-c . 插入时间 C-c C-e 导出其它格式 C-c C-s 在标题下面插入一个带有“==SCHEDULED==”关键字的时间戳。 C-c C-d 在标题下面插入一个带有“==DEADLINE==”关键字的时间戳 C-c C-t 将当前项的状态在(unmarked)->TODO->DONE 之间循环切换 M-RET 插入一个同级标题 M-LEFT/RIGHT 将当前的标题提升/降低一个等级 C-c C-c 插入标签tag。 光标在标题中 C-c C-q 插入标签tag。光标在任意位置 C-c , 设置当前标题的优先级,’A‘、’B‘和’C‘。’A‘是最高级别,如不指定,’B‘是默认的 C-c \ 查找标签tag S-Tab 展开所有标题 Tab 展开光标所在标题 [==[== Link ==][== Description]==]== 创建链接 C-c C-l 编辑链接 C-c C-o 打开链接 C-c | (竖线,not L) 输入 列 x 行, 插入一个表格 [/] 或者 [%] 通过在TODO项目下新建一个大纲树,并在子树上标记子任务来实现这个功能。为了能对已经完成的任务有个大致的了解,你可以在标题的任何地方插入‘[/]’或者‘[%]’。当每个子任务的状态变化时,或者当你在标记上按 C-c C-时,这些标记状态也会随之更新 <s Tab 开启一个代码块。 #+begin_src c -n -t -h 7 -w 40: c为所添加的语言,-n 显示行号,-t 清除格式,-h 7 设置高度为7 -w 40设置宽度为40 C-c ' 打开一个buffer, 输入代码,再按一次快捷键,将代码写入buffer C-c C-c 运行源代码,并生成一个RESULT块 内容元数据 详情见文后 Markdown-Mode 快捷键 用途 C-c C-c p 生成临时文件并在浏览器中预览 C-c C-c v 生成 basename.html 并在浏览器中预览 C-c C-a u 插入=<>=这样的链接 C-c C-a f 插入脚注链接 C-c C-a l 插入==这样的链接 Org-Mode 内容元数据 快捷键 内容 用途 s #+begin_src … #+end_src e #+begin_example … #+end_example : 单行的例子以冒号开头 q #+begin_quote … #+end_quote 通常用于引用,与默认格式相比左右都会留出缩进 v #+begin_verse … #+end_verse 默认内容不换行,需要留出空行才能换行 c #+begin_center … #+end_center l #+begin_latex … #+end_latex L #+latex: h #+begin_html … #+end_html H #+html: a #+begin_ascii … #+end_ascii A #+ascii: i #+index: line I #+include: line