[观点]为什么我喜欢Smalltalk?

Alan Kay——面向对象之父:预测未来,创造未来 Alan Kay 更多时候,Alan Kay是以面向对象程序设计和Smalltalk创世人的身份被我们记住,以软件大师和计算机界泰斗的高度被我们仰视;但你是否知道,他还是个发明家。 简介 天才计算机大师阿伦凯,他是Smalltalk面向对象编程环境语言的发明人之一,也是面向对象编程思想的创始人之一,他还是笔记本电脑最早的构想者和现代Windows GUI的最初尝试者。 “预测未来的最好方法,就是把它创造出来”这是天才大师阿伦凯的名言,他是Smalltalk面向对象编程环境语言的发明人之一,也是面向对象 阅读详情

我认为作者说的很有道理


导读:本文是从《Why I love Smalltalk》这篇文章翻译而来,译文来自外刊IT评论《为什么我喜欢Smalltalk?》。Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境(IDE)。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:Objective-C,Actor, Java 和Ruby等。

文章内容如下:

C,C++,Python等,这些算是传统的语言吧,我从这些语言上学会了基本的编程技术。这之后,又有四种语言,它们让我学到了一些新的东西。这些语言改变了我思考的模式,虽然我从来没有使用过它们,但它们都是绝对值得你学习一下的。它们是:

  • Smalltalk
  • Lisp
  • Erlang
  • Haskell

你也许还会把Prolog加入这个列表中,但我没有学过Prolog。本文是关于Smalltalk这种语言的。

我的目的并不是教大家怎么使用Smalltalk,而是向你展示一些Smalltalk能做到、而其它语言做不到的一些事情(声明:有些语言也能做到,它们都是Smalltalk的一些方言)。不用说,我需要向你先介绍一下这种语言的一些基本知识,之后我才能向你展示更有价值的东西,那么就开始吧,第一个程序:

1 + 1

很显然,计算的结果是2.如果你想把它存到一个变量里,这样做:

m := 1 + 1

句子都要以点号(句号)结尾,像这样:

m := 1.
m := m + 1

在Squeak——这是Smalltalk语言的一种版本实现——里,有一个对象叫做Transcript,你把消息发送给它,它能把消息显示到屏幕上。它很像一个Log窗口。你要这样去用它:

Transcript show: 'Hello world'

运行的效果会是这样:

Squeak transcript showing the result of Transcript show: 'Hello World'

Smalltalk的这种语法非常的独特。消息(message)——这在其它语言里也叫做“方法”——是show:(包括冒号),它接受一个参数。我们用下面的写法可以让这个句子运行10遍:

10 timesRepeat: [
  Transcript show: 'Hello world'
]

现在你开始能看出Smalltalk的独特之处了。我把消息timesRepeat:发送到对象“10”——一个Integer类。这N次的循环操作是由这个Integer来执行的,你认真想想,其实很有道理。

第二个有趣的部分是代码段落(block),是在方括号里面的部分。你可能认为它跟其他种语言里的代码段落语法是同样的道理,比如Java的:

for(int i=1; i<11; i++) {
  System.out.println("Hello world");
}

但你要是从Smalltalk的视角来看,你会发现它强大的多。它实际上是个闭包(closure)。看这段:

t := [
  Transcript show: 'Hello world'
]

现在,我有了一个叫做t的变量,它的类型是BlockClosure,通过这个变量,我可以做我想做的任何事情。如果我向它发送class消息,它会返回它的class类型:

t class

如果我向它发送value消息,它会运行,会在Transcript里留下“Hello World”字符:

t value

让我们多看几段程序。一个没有任何参数的消息:

10 printString

带有一个参数的消息:

10 printStringBase: 2

带有两个参数的消息:

10 printStringBase: 2 nDigits: 10

很可爱,不是吗?这个方法叫做printStringBase:nDigits:。我没在其它地方见过这样的语法;只有Objective-C是个例外,因为它是从Smalltalk承袭过来的。

小玩意已经说的不少了,现在说点复杂点儿的东西。我们来创建一个类:

Object subclass: #MyClass
       instanceVariableNames: ''
       classVariableNames: ''
       poolDictionaries: ''
       category: 'Pupeno'

注意,一个类的创建是通过向其它类发送消息—包括名字和一些参数,告诉它我要继承它。这是一个消息,跟其它类型的方法调用一样。对象是类,类也是对象。Smalltalk的对象模式非常的优雅,但这是另外一个话题。

现在我们有了一个类,我们来创建一个方法,叫做greet:就在这个类里。

greet: name
  "Greets the user named name"

  | message |

  message := 'Hello ', name.
  Transcript show: message.

在方法定义里,首先我们给这个方法加了一个注释,然后是管道(“|”)包着的本地变量,然后是方法的实现,我把”Hello“放到了变量message里,然后用逗号符把它和变量name连接起来。然后我把它发送到Transcript里。

运行起来的结果像这样:

MyClass greet method

好了,我们来用一用它:

m := MyClass new.
m greet: 'Pupeno'

为了创建一个类MyClass的对象,我们向这个类发送new消息。这个new并不是像Java里的关键字。new是一个方法。你可以看它的源代码,覆盖它,等等。不要动它,除非你十分清楚你在做什么。

事实上,如果你想一下,你会发现我们没有看到任何的关键字。看看我们写过的这些代码,没有什么要记住的关键字!更重要的,目前为止,你已经基本的认识Smalltalk了。Smalltalk就是这些,但就像是一个小积木块,这些小块能让你搭建出你想要的任何东西。

不错,就这些,我要说的就这些。我们看到了,Smalltalk里没有循环,它有整数类,这个类里实现了timesRepeat:消息,可以用来把事情重复执行N次。像这样用于循环操作的方法到处都是。

你会问,有没有if这个关键字?Smalltalk里肯定有一个if关键字,不是吗?不,没有。你所谓的if语法在Smalltalk里可以用你刚才看到的类和消息传递的机制实现。为了好玩,我们来实现一个。

我们从创建一个PBoolean类开始,然后两个继承它的类——PTrue 和 PFalse。

Object subclass: #PBoolean
       instanceVariableNames: ''
       classVariableNames: ''
       poolDictionaries: ''
       category: 'Pupeno'

PBoolean subclass: #PTrue
       instanceVariableNames: ''
       classVariableNames: ''
       poolDictionaries: ''
       category: 'Pupeno'

PBoolean subclass: #PFalse
       instanceVariableNames: ''
       classVariableNames: ''
       poolDictionaries: ''
       category: 'Pupeno'

我们之前创建了一个类,MyClass,我们要给它定义一个equals:方法,它能返回true和false,也就是我们的PTrue和PFalse。

equals: other
  ^ PTrue new

这个小帽子,^,是返回的意思。我写的是硬编码让它返回true。现在我们可以在程序来用它了:

m1 := MyClass new.
m2 := MyClass new.
m1 equals: m2

得到的是true。我们已经接近目标了,但还不是if。if应该是个什么样子?它的样子应该是这样:

m1 := MyClass new.
m2 := MyClass new.
(m1 equals: m2) ifTrue: [
  Transcript show: 'They are equal'; cr
] else: [
  Transcript show: 'They are false'; cr
]

估计你在想,怎么才能实现这样的效果。我在PTrue里加入了一个方法:

ifTrue: do else: notdo
  ^ do value

这个方法看上去是接受2个参数,但执行时接受第一个,忽略第二个。对于PFalse,正好相反:

ifTrue: notdo else: do
  ^ do value

这就可以了。一个可以用的if!如果让我说,我觉得这真的很神奇。如果你去检查Squeak了的代码,你会发现它里面的if就是这样实现的:

True's ifTrue:ifFalse:

如果你使用的编程语言能允许你创建像if条件这样的基本功能,那它就可以让你创建任何你想要的东西。


9、Smalltalk 中类方法的实现与类结构的替代方案 本文探讨了 Smalltalk 中类方法的实现机制,包括继承与方法搜索、方法定义的结构、伪变量 self 的作用、结果返回、实例变量的访问方式以及关键字和二元方法的定义。同时,文章还提供了一个类结构的替代实现方案,通过创建新的 MyCircle 类,展示如何在不改变外部行为的前提下重构类的内部结构,强调了信息隐藏和封装在面向对象编程中的重要性。 阅读详情

相关推荐

Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)

Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)算法背景介绍Hessian 矩阵与泰勒多项式关于求t导数与中心点、亚像素点高斯函数作用文献 算法背景介绍 在线结构光视觉传感器中,由线激光器发射出的线结构光,在本质上为一个连续且具有一定厚度的空间光平面,而在目标表面上所形成的具有一定宽度的光条特征,即为该光平面与目标表面相交而成的交线。在该空间光平面的厚度方向上,光强近似服从高斯分布,因而在摄像机采集到的光条图像中,在沿着光条宽度的方向或光条的法线方向上,其灰度也会呈现出类似

jiangxing11的博客 1万+

smalltalk语言介绍语法简单总结

参考:https://www.jianshu.com/p/0aac0ba06808 最近在学习Object C,Object C很多特性继承了smalltalk语言的特性,所以先了解一下smalltalk语言。smalltalk起源于上个世纪70年代,被公认为历史上第二个面对对象的程序设计语言,有自己的语法和语义。跟现在流行的编程语言有点差别,所以即使你是资深程序员,可能也一眼看明白它的意思。 特点 1.所有的东西都是对象。 2.通过发送消息,通知对象要做什么。可以理解为函数调...

luoyaxing0812的专栏 3420

MitoZ|动物线粒体基因组组装注释软件

一、MitoZ是什么 是基于python3开发的可以自动过滤双端测序的原始数据、mt基因组组装、mt基因组注释以及mt基因组可视化的工具。 官方的说明文档地址:https://gitee.com/CHANyp/MitoZ#citation 二、MitoZ的安装 git clone https://gitee.com/CHANyp/MitoZ.git cd MitoZ/version_2.4-alpha tar -jxvf release_MitoZ_v2.4-alpha.tar.bz2 三、运行Mito

qq_50637636的博客 1万+

一、何为Smalltalk?他的影响有哪些?

摘要:Smalltalk是1970年代由施乐帕洛阿尔托研究中心开发的纯面向对象编程语言,其"一切皆对象"理念成为OOP基石。核心特性包括动态类型、消息传递机制和集成开发环境,深刻影响了Java、Python等现代语言。Smalltalk还催生了GUI设计,为苹果和微软系统提供灵感。尽管未成主流,其动态编程思想和元编程能力仍对计算机科学产生深远影响,是编程范式演进的关键里程碑。(150字)

愿生活:送君茉莉 愿君莫离3,送君红荼 愿君荣华3,送君可乐 愿君常乐3,送君旺仔 愿君开怀5,送君阿萨姆 愿君不辛苦5 送君娃哈哈 愿君天天笑哈哈 8 1427

SpyGlass CDC实战:如何用sgdc约束文件解决跨时钟域报错(附常见错误排查)

本文详细介绍了如何使用SpyGlass CDC工具链中的sgdc约束文件解决跨时钟域(CDC)报错问题。从基础约束文件架构到复杂场景调试,涵盖了时钟域定义、复位信号约束、Waiver策略等关键技巧,并附有常见错误排查方法,帮助工程师高效处理CDC验证挑战。

loss4bartender的博客 1148

ControlCAN.dll开发适配USBCAN_E/2E_U设备

摘要:本文提供了USBCAN_E/2E_U设备的配置指南:1)安装专用驱动;2)获取最新的ControlCAN.dll文件;3)修改VCI调用顺序,新增VCI_SetReference函数设置波特率;4)使用工具计算波特率配置值,并给出了常见波特率对应的代码参考值(如500K对应0x060007)。配置过程强调使用特定工具计算精确的波特率参数,并提供了相关软件下载链接。

weixin_43969033的博客 390

Smalltalk语言

Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。 Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,    主要有:    Objective-C,Java 等。 90年代许多软件的开发思想也是得利于Smalltalk。 Smalltalk编程语言对近代面向对象编程语言影响很大,所以称之为“面向对象编程之母”。

飞天鱼的专栏 2万+

别再手动找触点了!EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战

本文详细解析EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战技巧,帮助电气设计工程师提升图纸操作效率。通过精简编号、路径栏显示和元件旁可视化三种模式的应用场景对比,结合快捷键肌肉记忆训练法,实现触点快速定位与管理,大幅减少手动查找时间。

weixin_42522964的博客 481

Smalltalk学习资料汇总 - 开创性的面向对象编程语言

Smalltalk是一门开创性的面向对象编程语言,由Alan Kay等人于20世纪70年代在Xerox PARC开发。纯面向对象设计,一切皆为对象动态类型反射能力强独特的开发环境与镜像系统尽管Smalltalk不再是主流语言,但它的设计理念深刻影响了后来的许多编程语言,如Java、Ruby、Objective-C等。学习Smalltalk有助于深入理解面向对象编程的本质。Smalltalk是一门富有魅力的语言,值得每个程序员花时间了解。

2401_87189860的博客 595

LSTM+Transformer混合模型时间序列预测实战教学

LSTM+Transformer混合模型时间序列预测实战教学 毕业设计

8219

秃鹰搜索优化算法(BES)详解:从自然捕食到全局优化

秃鹰搜索优化算法(Bald Eagle Search Optimization Algorithm,BES)是由马来西亚学者Alsattar等人于2020年提出的一种新型元启发式优化算法。该算法灵感来源于秃鹰在自然界中高超的捕食行为,特别是其独特的狩猎策略和卓越的视觉搜索能力,模拟了秃鹰捕食鲑鱼等猎物的完整过程。

qq_42212808的博客 1353

smalltalk_通过Smalltalk回到未来

smalltalk 小号 oftware发展,在古代技术陷入了几十年。 今天,我们创建软件的方式与1960年代和1970年代的软件方式并没有太大不同。 那时,我们使用了文本编程语言,例如FORTRAN,LISP,COBOL,BASIC,Pascal和C,其程序是使用文本编辑器(例如TECO,QED,vi和Emacs)编写的。 我们将程序源代码存储在文件和文件夹中。 我们从命令行编译了这些程...

编程故事的地方 846

NVIDIA Isaac Sim 联合 VS Code 开发调试环境配置

在 Visual Studio Code (VS Code) 中打开 Isaac Sim 软件包主文件夹,即可打开该工作区。注意建议在学习教程和示例时使用 Visual Studio Code。另请参见有关 VS Code 工作区的详细信息,请参阅 Visual Studio Code (VS Code) 文档。

2506_90492529的博客 3104

最早的MVC语言smalltalk

本人比较喜欢smalltalk的精简,不像java,关键字太多,type系统繁琐,如(Date date = new Date)。  smalltalk的语言核心极为精简,同时message传递的语义也使编程人员更好的理解OO,任何元素都是Object,不像Java,搞出了8个基本类型。  smalltalk有block,block从函数语言的角度看算是lambda(smalltalk设计时借

牛儿吃草的博客 4017

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

一位Smalltalk 程序员眼中的开发和部署

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33909059的博客 345

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

smalltalk与面向对象语言及发展史。

Simula 面对对象语言的鼻祖。1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。之后,在1968年2月形成了Simula 67的正

蓝叶菱的专栏 2925

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

BPatterns:革新Smalltalk重写引擎

2026年2月2日消息,BPatterns作为具备Smalltalk风格的重写引擎登场。它为开发者提供了更易用的API,解决了传统重写引擎语法难记的问题,助力开发者更高效地开展工作。

yuyanhome的博客 19

艾伦·凯与Smalltalk语言

为什么80%的码农都做不了架构师?>>> ...

weixin_34049948的博客 649

程序员观点 – 谁是大英雄?

IPad和IPhone真是太热了,以至于Steve Jobs走了,也成了一件大事件,如果在联合国表决一下给Jobs下个半旗什么的,估计八成是一致通过,即便是卡扎菲/金正日这类牛人多半也不会投反对票吧。看着媒体上那些怀念Jobs的人们,就不由自主地想,那里面会有几个人是或曾经是程序员呢?个人感觉不会有多少程序员会觉得IPad/IPhone,甚至Jobs有多么伟大。因为我相信,程序员多有“打破砂锅问到...

weixin_30932215的博客 293

python支持多种编程范式吗_为什么现代编程语言支持更多的编程范式,这样更好吗?...

因为你不知道。Algol 60就有Function As Argument,还是Call By Name的。然后Algol的条件选择,递归,JMC 有参与设计。这还不够,Landin还来了一发

weixin_39646107的博客 132

胡子决定编程语言运势(<程序员2005年第一期文章)

2005年第一期《程序员》上,由我策划组织,当时在我社工作的方茜小姐执笔,发表了一篇很有意思的文章《胡子决定编程语言运势》。事后很长时间,我的不少朋友都还对这篇文章记忆犹新,左轻侯老弟甚至评价说这篇八卦是《程序员》 5年来最精彩的一篇文章。虽说有些言过其实,不过我也觉得这是我们程序员文化中难得的一篇精彩八卦,可以为我们的聚会提供很好的谈资,甚至应该成为我们这个群体的集体记忆。因此,在这篇文章发表将

孟岩 3万+

黑马程序员_编程范式

编程范式 程序设计有一个范式(paradigm)问题。所谓范式,就是组织程序的基本思想,而这个基本思想,反映了程序设计者对程序的一个基本的哲学观,也就是说,他认为程序的本质是什么,他认为一个大的程序是由什么组成的。而这,又跟他对于现实世界的看法有关。现在主流的编程范式有:过程范式、函数范式以及对象范式。 过程范式认为,程序是由一个又一个过程经过顺序、选择和循环的结构组合而成。反映在

smile -_-的博客 475

UML参考手册 第一部分 背景知识 第2章 模型的性质与目标

UML参考手册  第一部分 背景知识  第2章 模型的性质与目标  本章将解释什么是模型,模型有何用途以及如何使用模型。本章还将解释模型的不同层次:理想的,部分的和基于工具的。2.1 什么是模型  模型是用某种工具对同类或其他工具的表达方式。模型从某一个建模观点出发,抓住事物最重要的方面而简化或忽略其他方面。工程、建筑和其他许多需要具

CandyCat的专栏 2380

对女性友好的编程语言

一直以来,女性程序媛在程序员行业中占据很少的比例,似乎大多数编程语言都是为男性而创建的,它们充满了数学和怪异的行话。那么,在编程语言国度,有为女性准备的语言吗?什么样的编程语言对女性程序员友好呢?对此,Gayle Laakmann McDowel(Gayle Laakmann McDowell是CareerCup公司的创始人兼CEO,也是《Cracking the Coding》 以及《The G...

weixin_30687811的博客 127

敏捷和大人物

原文:Agility and the Big Dog  今天,有人把这个链节发给我看,但是我并不赞同里面的所有内容,不过我喜欢后面的这段话: “校园内的大人物”应该对什么嚷嚷? 如果他们将OOP作为敏捷开发焦点的中心,那么大人物叫嚷的对象就是他们自己。  这让我想起了今年早些时候,我和Richard MonsonHaefel就这个话题交换的一个看法:至少是社区没有能力跳出它对OO的固执看法。 

软件开发资料汇总 368

function/bind的救赎(上)

这是那篇C++0X的正文。太长,先写上半部分发了。 Function/bind可以是一个很简单的话题,因为它其实不过就是一个泛型的函数指针。但是如果那么来谈,就没意思了,也犯不上写这篇东西。在我看来,这个事情要讲的话,就应该讲透,讲到回调(callback)、代理(delegate)、信号(signal)和消息传递(messaging)的层面,因为它确实是太重要了。这个话题不但与面向对象的核心思想密切相关,而且是面向对象两大流派之间交锋的中心。围绕这个问题的思考和争论,几乎把20年来所有主流的编程平台和编

孟岩 10万+
上一篇: MyEclipse 快捷键
下一篇: 60款jQuery 幻灯片
程序员迈克
博客等级 码龄16年 36粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值