首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Lisp语言如此先进?(译文)

思想1到思想5已经被广泛接受,思想6开始在主流编程语言中出现,思想7在Python语言中有所实现,不过似乎没有专用的语法。 思想8可能是最有意思的一点。...它由列表构成,而列表则是Lisp的基本数据结构。 用一门语言自己的数据结构来表达该语言,这被证明是非常强大的功能。思想8和思想9,意味着你可以写出一种能够自己编程的程序。...如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、atom、eq这样的功能,还有一种把函数写成列表的表示方法,那么在它们的基础上,你完全可以推导出Lisp语言的所有其他部分。...而且尽管Python确实支持函数数据类型,但是没有一种字面量的表示方式(literal representation)可以生成函数(除非函数体只有一个表达式),所以你需要创造一个命名函数,把它返回。...你实际上就是在做同样的事,只不过划出了一个独立的区域,保存累加器函数,区别只是保存在对象的一个属性中,而不是保存在列表(list)的头(head)中。

1.2K60

因为对Perl和Python不满?圣诞节无聊?编程语言的出现都这么随意吗?

1960 年的 Lisp 并没有来得及设计自己的语法,就被麦卡锡的学生实现了,因为没有语法,麦卡锡的学生就以列表格式的语法分析树(即,S(Symbolic)表达式)作为临时语法。...随着 Fortran 的诞生,其他一些语言也在开发中,这些语言的语法格式各不相同,而且和 Fortran 一样,都与运行它们的具体计算机关联(比如标示符长度、代码行数的限制等)。...初学者的语言:BASIC BASIC 语言诞生于 1971 年,设计的主要目的是:使得计算机语言可以被非理工科生使用(当时理工科学生使用的 Fortran 和 Algol 60 很难被文科生掌握)。...类中可以定义方法,属性等。 A.18. 命令式面向对象语言:C++ C++诞生于 1983 年,是在 C 的基础上,以 SIMUAL 67 的方式对命令式编程的面向对象扩展。...最新版本是 2014 发布的 C#5.0。.NET 4.0 引入了动态类型,使得.NET 平台可以嵌入动态语言,比如:Lisp、Python、 Ruby 等。 A.30.

1.7K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CMake 秘籍(四)

    在本方法中,我们将使用一个相对简单的 Python 脚本,下面我们将详细介绍。该脚本将读取print_info.c.in,并使用从 CMake 传递给 Python 脚本的参数替换文件中的占位符。...例如,我们可以想象根据检测到的平台或架构生成不同的源代码。或者,我们可以使用 Python 的简单性在构建时根据配置步骤中收集的输入生成明确且高效的 C++代码。...CMake 提供了cmake_parse_arguments命令,我们用函数名(add_catch_test)调用它,选项(在我们的例子中没有),单值参数(这里,NAME和COST),以及多值参数(这里...,因为没有头文件,接口是通过生成的 Fortran 模块文件进行通信的。...在本配方中,我们没有指定 Fortran 模块文件应放置的目录,并保持了这种透明性。可以通过设置CMAKE_Fortran_MODULE_DIRECTORY CMake 变量来指定模块文件的位置。

    25120

    无缝衔接Fortran大气模式和Keras深度学习模型!

    在这种情况下,FKB可以对Keras实现的次网格云和辐射物理的一百多个候选模型进行超参数搜索,然后迁移应用到Fortran中以评估拟合存在缺陷的模型与行星尺度流体动力学耦合时的性能。...Fortran和Python生态中FKB的作用 FKB/P可以获取Keras的深度学习模型,然后传递给FKB/F,FKB/F可以利用Keras构建和训练的模型,从而将Python的网络模型和Fortran...同样的,可以将Fortran构建的神经网络模型迁移到Python中进行分析、扩展和优化,比如使用Python相关工具进行超参数搜索。...自定义损失函数 在Keras、TF、Pytorch中自定义损失函数是非常常用的功能。FKB中也提供了自定义损失函数的功能,但是FKB并没有提供自动微分的功能。...Python和Fortran有效的连接起来,在数值计算模型中充分利用Python生态中的深度学习环境。

    3K30

    NumPy 1.26 中文文档(四十五)

    extra_f77_compile_argsstr 列表 传递给 fortran77 编译器的额外命令行参数。...extra_f90_compile_argsstr 列表 传递给 fortran90 编译器的额外命令行参数。...假设您的软件包中有编译代码(如果没有,您有几个很好的选项,例如 Poetry、Hatch 或 PDM 提供的构建后端),并且您希望使用一个设计良好、现代且可靠的构建系统,我们建议使用: Meson,以及...假设您的软件包中有编译代码(如果没有,您有几个良好的选择,例如 Poetry、Hatch 或 PDM 提供的构建后端),并且您希望使用一个设计良好、现代化和可靠的构建系统,我们建议: Meson和meson-python...其中大多数可以从 Python 中访问,但由于使用受限,有些则没有暴露出来。

    13510

    畅谈百年编程语言

    所以,在“否”栏中有一个复选标记。 但这当然不是投票。相反,Fortran 和它的用户社区所关心的是性能。LISP 的重点是灵活性和可表达性。 性能是必要的吗?那得看情况了。...但对于 Ruby 这样的小众语言来说,却是如此。 更快,更慢 对优先级的担忧也是为什么 Python 在 Python 2 向 Python 3 的过渡中花费如此漫长而痛苦的时间。...最终,处理器变得更快,这一点被放弃了——在现代 LISP 的实现中,car 和 cdr 绝对不是简单的寄存器访问,而且没有人在乎。只要性能可以接受,这对他们的社区来说并不是一个重要的承诺。...否则像指针别名这样的问题就会把它的早期用户赶到 Fortran 的怀抱中,而 Fortran 是一种更快的语言,没有这个问题。 C 是一种足够快、足够令人愉悦的语言,它能够很好地兼顾特性和性能。...在 Fortran 中,他们不把可表达性看得比速度更重要。而在 Ruby 中,他们很重视。在 Rust 中,内存安全是最重要的。在 C 语言中,能够以奇怪的方式处理内存,远比安全更重要得多。

    28230

    Django ORM 知识概要

    相关命令 python3 manage.py makemigrations 根据模型生成相关迁移文件 python3 manage.py migrate 根据迁移文件,将表结构更新到数据库中,并在...int类型,底层是 Python timedelta 实现 models.DurationField() 浮点型 models.FloatField() 可以指定整数多少位,小数多少位 models.DecimalField...SQL等价物:RESTRICT。 SET_NULL:将引用设置为NULL(要求字段可以为空),当字段设置null=True才可以使用 SET_DEFAULT:设置默认值。...只有当字段设置了default参数时才能使用 SQL等价物:SET DEFAULT。 SET(value 或者 函数返回值):设置给定值。这个不是SQL标准的一部分,完全由Django处理。...,Meta类的字段如下: db_table ordering 列表或者元组形式 verbose_name 别名 verbose_name_plural 别名复数 abstract 不同步到数据库,只是用于被别的类继承

    1.8K20

    你应该知道的10种Python文件系统方法

    您可以读取和写入它们。您可以将它们放在目录框中。Capiche? ---- 在本指南中,我们将介绍os和shutil模块中的方法。所述OS模块是用于与操作系统进行交互的主要Python模块。...我的示例代码可以在GitHub上找到。 用下面引号中的参数替换你自己的参数。 现在我们已经完成了背景,让我们开始吧!这是您应该知道的10个命令的列表。... - 获取当前工作目录的内容作为字符串列表ls os.walk("starting_directory_path")- 返回一个生成器,其中包含当前目录和所有子目录中的目录和文件的名称和路径信息 - 没有确切的短...()- 创建一个路径供以后使用 - 没有短的CLI等价物 os.makedirs("dir1/dir2") - 制作目录 - mkdir -ps hutil.copy2("source_file_path...改变一切 os.chdir("/absolute/or/relative/path") - 更改当前工作目录 - cd os.path.join()- 创建一个路径供以后使用 - 没有短的CLI等价物os.makedirs

    1.2K10

    NumPy 1.26 中文文档(五十)

    第 10 行解析了传递给rms函数的输入。从格式字符串"O:rms",我们可以看到参数列表预期是一个单一的 Python 对象(由冒号前的O指定),它的指针存储在obj0中。...这种模式经常在存在多个输出变量且单个返回参数因此不足够时发生。在 Python 中,返回多个参数的常规方法是将它们打包到一个序列(元组、列表等)中并返回该序列。这就是 argout 类型映射的作用。...如果使用这些 argout 类型映射的包装函数具有多个返回参数,则它们将被打包到一个元组或列表中,具体取决于 Python 的版本。Python 用户不需要传入这些数组,它们只会被返回。...从格式字符串"O:rms",我们可以看到参数列表预期是单个 Python 对象(由冒号前的 O 指定),其指针存储在 obj0 中。...当存在多个输出变量且单个返回参数不足时,此模式经常出现。在 Python 中,返回多个参数的常规方法是将它们打包到一个序列(元组、列表等)中并返回该序列。这就是 argout 类型映射所做的。

    14410

    在C++中调用Python

    这样的话,如果代码的主体还是用C++完成的,而部分功能为了简便,引入一些Python中已经封装好的函数,这样就可以很好的结合两种语言各自的特点。...而另一种工作方式:通过Python来调用一些C++或者Fortran中实现的高性能函数,可以参考这一篇博客。...这些参数其实也可以运行python3.9-config去一个一个查看,这里我们直接推荐一种可以运行成功的参数,其中最重要的是-I和-l这两个路径一定要包含: dechin@ubuntu2004:~/projects...调用Python函数string.split() 在C++中如果我们想分割一个字符串,虽然说也是可以实现的,但是应该没有比Python中执行一个string.split()更加方便快捷的方案了,因此我们测试一个用.../cpy res:0x7ffe94beb320 TypeError: argument list must be a tuple 这个也可以理解,Python中的函数调用,输入参数都被打包成了一个tuple

    4.1K30

    NumPy 1.26 中文官方指南(三)

    NumPy 数组切片使用传址,不会复制参数。切片操作是对数组的视图。 大致的等价物 下表列出了一些常见 MATLAB 表达式的大致等价物。这些是相似的表达式,而不是等价物。详情请参见文档。...可以在 主题软件页面 中找到用于使用 Python 进行科学工作的工具的详尽列表。 请查看 Python 软件列表:脚本语言 获取使用 Python 作为脚本语言的软件列表。...使用 Meson 进行高级构建 Meson 支持标准环境变量CC,CXX和FC来选择特定的 C、C++和/或 Fortran 编译器。这些环境变量在Meson 文档中的参考表中有文档说明。...使用 Meson 进行高级构建 Meson 支持标准环境变量CC、CXX和FC来选择特定的 C、C++和/或 Fortran 编译器。这些环境变量在Meson 文档中的参考表中有文档。...如果您的系统中没有f2py命令可用,您可能需要将其作为模块运行: python -m numpy.f2py 如果您运行f2py而没有参数,并且最后一行的numpy 版本与从python -m numpy.f2py

    38410

    15个节省时间的Jupyter技巧

    在这篇文章中,我们将讨论一些可以节省时间,降低计算成本的技巧。 1、魔法命令 在Jupyter notebook中,“魔法命令”是特殊的命令,不是Python语言的一部分,但可以使您的生活更轻松。...魔法命令很有用,可以直接嵌入到python代码中,并解决常见问题,例如列出当前目录中的所有文件或更改当前工作目录。 下面是一些常见的魔术命令: %run:在当前内核中运行Python脚本。...命令前的前缀可以运行操作系统的命令。例如,要列出当前目录下的文件,可以使用ls命令: !ls 你也可以通过在命令后面添加参数来传递参数。...如果你正在处理大量的大型数据集,并且numpy的速度不够快,那么你可以直接在python代码中直接编写一些c或fortran代码。...如果在单元格中有以下代码: %pycat example.py 它将在单元格的输出中显示example.py文件的内容。这对于快速查看Python文件的内容非常有用。

    2.1K40

    CMake 秘籍(五)

    我们的示例没有使用这些选项,因为“Hello, World”示例没有任何测试,但在第五章,将您的项目作为超级构建管理中,我们将触发测试步骤。...在本章中,我们将展示如何将用不同编译型(C、C++和 Fortran)和解释型(Python)语言编写的代码集成到一个可移植和跨平台的解决方案中。...对于我们当前的目的,名称重整并不是真正的问题。Fortran 2003 标准为函数和子程序定义了一个bind属性,它接受一个可选的name参数。...这样,编译后的模块可以在PYTHONPATH中找到。在本示例中,我们实现了 Python 和 C++层之间相对干净的分离。...然而,我们可能会遇到没有 C++接口可供连接的情况,这时我们可能希望将 Python 与 Fortran 或其他语言连接起来。

    73220

    Linux下MPI的安装与vscode的配置

    --version 如果没有安装则使用 sudo apt-get install gcc 安装即可(gcc替换成你没有的编译器)。...下好了之后将其放到你要安装的目录下,强烈建议在home目录下建一个新的文件夹比如mpi来放置 1.3 安装 将下载的安装包进行解压,可以在窗口中选中右键解压,也可以 cd 到目录下用 tar xzf +...然后打开终端cd进入你所下载的压缩包的解压文件夹,该路径下有个 example 文件夹,里面是mpich官方的示例代码,终端中输入: mpirun -np 10 ....MPI_Init(&argc, &argv) Fortran版本调用时不用加任何参数,而C和C++需要将main函数里的两个参数传进去,因此在写main函数的主程序时,应该加上这两个形参。...可以看出该函数接口有两个参数,前者为进程所在的通信域,后者为返回的进程号。通信域可以理解为给进程分组,比如有0-5这六个进程。

    11.1K20
    领券