能量 权重(weight) 熵(统计热力学) 温度(derive from 熵) 玻尔兹曼分布/玻尔兹曼因子/配分函数 能量 我们在这里将能量定义为分子相互作用的标度. 然后我们来看牛顿第三定律 $$F + F_反 = 0$$ 在此基础乘距离的微分$dx$ $$Fdx + F_反dx = 0$$ $$W_{A-B} = \int F_{A-B}dx \ \ \ \ W_{B-A} = \int F_{B-A}dx$$ $$\Delta E_{总} = W_{A-B} + W_{B-A} = 0$$ 这就是能量守恒.
权重 需要注意这里的权重我们并没有做归一化处理, 如果想进行归一的话, 我们在热力学中往往不使用$sum$, 而是用 $Weight_{max}$, 即权重最大项进行归一. 好, 接下来我们从高中接触的排列组合看权重. 经典的问题:
有8个不同小球, 4个篓子. 平均分布(即每娄放倆)有几种方法?
$OK$, 很容易想明白就是$$C_8^2 \times C_6^2 \times C_4^2 \times C_2^2$$. 其实可以直接写成这种形式$$\frac{8!}{\prod n!} (n = 2, 4, 6, 8)$$
$+$ My try: (define + (lambda (n m) (cond ((zeor? n) m) (else (add1 ( + (sub1 n) m)))))) At the beginnging, I have no solutions . Several seconds later, I noticed the hint given by book:
Hint: It uses zero ? add1 1 and sub1 1
Also, I find it is important to take $+$ just as a pure function. Finally I get the same solution with author’s
$-$ My try: (define - (lambda (n m) (cond ((zero?
thumbnail: https://mitpress.mit.edu/sites/default/files/9780262560993.jpg
[toc]
this article(list) is the record of studying TLS. I try to implement all functions with describations by myself before reading author’s implemention, which I think is the best way to learn scheme as the second(or tree, four…) language with TLS.
The Law of Car The primitive $car$ is defined only for non-empty lists.
$car$ is first S-expression of l. (include atom and list)
The Law of Cdr The primitive $cdr$ is defined only for non-empty lists.
2.1 — Function declarations that differ only in the return type, the exception specification (18.4), or both cannot be overloaded.
可见函数声明不能根据返回值判断, 也不能根据nonexcept或throw(c++11开始deprecated, c++17开始被禁用了)来重载了.
标准不许我们不能根据返回类型判断, 不过让我们开动脑筋思考怎么"破坏"这一规则.
假设我们有一个类, 恰好和$czxyl$同名:Czxyl.我们希望写出这样的代码,并且符合本身的语义, 即没有任何隐式cast:
int a = get(); char b = get(); float c = get(); 这里没有parameter, function name也一样, c/v/ref-qualifier也都没有. 所以能做文章的也只有return type了. 对重载稍微有些了解的, 或者接触过safe bool之类的idiom的童鞋, 肯定知道任何类都可以定义operator std::string, operator int这样的成员函数, 用来写出这样的代码:
int a = czxyl; char b = czxyl; float c = czxyl; 有的读者看到这里, 可能就开始信心满满的写出了如下代码:
#include <iostream> #include <string> const class Czxyl { private: int a = 1; char b = 'c'; float c = 1.
这篇文章试图从最简单的例子入手展开指针的实用的技能. 考虑到这篇文章的某些读者可能不是很熟悉c语言或者对指针仍然不是很熟悉, 所以我们先来看3个非常简单的例子来热下身, 不过为了增加点乐趣, 这里也会列出常见的一些错误. 不过为了保证文章的流畅性, 关于指针的语法细节我不会多涉及. 虽然很多例子都可以改用reference而不是pointers, 但是这里用pointers能更好的讲解, 有兴趣的同学也可以自己尝试用reference改写例子, 毕竟多动手时提高的唯一方式啊… 本文采取的书写方式主要是用问答式, 并且尽量将问题进行分解, 也就是说每次提问的答案都很简短, 但是问题会因此增多, 也会反复强调些要点. 所以希望大家看到一个问题先做思考. 当然如果大家发现我的答案和我的提问不匹配时希望能留言或者发邮件至czxyl@protonmail.com给我一个改正的机会, 谢谢.
warm up case0: preface int main() { int *x = new int(1); int **x_address = &x; } Q0.1: 这里的x和x_address代表什么? answer: x 代表1这个rvalue的地址, 也就是说它的值是就是一个整数的地址 或者说x这个地址上存储着一个int 1, 如果我们对x进行dereference, 得到的值就是1了 x_address代表着x这个地址的地址. 如果我们对x_address进行dereference, 那么得到的值就是x, 也就是一个整数的地址了. 如果再进一步dereference得到的就是1了. 所以本文就是围绕着这么个最简单的知识展开的.
case1: swap swap: version A void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } swap: version B void swap(int *a, int *b) { int *temp = a; a = b; b = temp; } swap: version C void swap(int **a, int **b) { int ** temp = a; a = b; b = temp; } swap: version D void swap(int a, int b) { int temp = a; a = b; b = temp; } Q1.
什么是char? 初学c语言的同学可能以为 char表示的就是字母意义的字符, 那我们来看下 C Primer Plus和 Wikipedia上对它的定义
The char type is used for storing characters such as letters and punctuation marks, but technically it is an integer type. Why? Because the char type actually stores integers, not characters.
Smallest addressable unit of the machine that can contain basic character set. It is an integer type. Actual type can be either signed or unsigned depending on the implementation. It contains CHAR_BIT bits.