27 分•作者: sungeuns•6 天前
返回首页
一周热榜
27 分•作者: robinhouston•6 天前
27 分•作者: kserrec•6 天前
我创造了一门编程语言!<p>我称之为 AttaLambda。<p>其理念是:一种可用的 Lisp 风格语言,其中所有有意义的计算都通过无类型 lambda 演算完成。逻辑、算术、数据结构、控制流,甚至类型——全部是无类型 lambda。一个小型、显式的 Racket 层位于边界,用于处理外部世界,再加上一些用于语法糖的宏。<p>这是它的故事:<p>几年前,我想玩转无类型 lambda 演算,并超越教程通常的讲解范围。教程会展示布尔值、数字、算术,或许还有 Y 组合子——然后就结束了。我想让它们继续深入。<p>于是我开始了一个名为 All The Lambdas 的项目。使用 Racket 的惰性求值模式,我只使用了一个 Racket 构造来进行实际计算——lambda——并构建了整数、有理数、列表、二进制数字列表编码、搜索算法等等。<p>然后我发现了 Greg Michaelson 的《Functional Programming Through Lambda Calculus》。书中,Michaelson 勾勒出了一个基于无类型 lambda 演算构建的语言的骨架,包括一个类型系统,其中类型化对象本身就是包含类型标签和值的成对函数。<p>我觉得这很有趣,于是实现了并扩展了这个想法,仍然完全使用无类型 lambda。我没有编程语言理论背景,所以我是边做边摸索的。<p>然后我暂时搁置了一段时间。<p>最近我重新拾起,心想:为什么不借助代码生成代理,将它变成一门真正可用的语言呢?我重用了 All The Lambdas 的大部分内容作为基础。<p>于是 AttaLambda 诞生了。<p>一些附加细节:<p>* Rat,它的数字类型,使用二进制数字列表编码而不是 Church 计数,因此数字的缩放与其二进制数字的数量而不是其值有关。<p>* 错误是 lambda 编码的值,而不是 Racket 异常,它们像普通数据一样在语言中传播。<p>* Racket 主机只执行不可约的外部操作;即使是 HTTP 解析、路由和响应构建等操作也保留在纯 lambda 世界中。<p>* 递归使用 lambda 演算的递归:没有循环或真正的自引用,只是底层使用了 Y 组合子。<p>* 自动纯度检查可以捕获意外的作弊行为,例如原生计算泄露到纯洁部分。<p>* 多参数 lambda、let、cond 和 list 等语法只是宏糖,它们会规约成一元 lambda 和应用。<p>一些代码示例:
(除了 print,这里的所有内容都会规约成一元无类型 lambda)<p>阶乘:<p><pre><code> #lang attalambda
(rec factorial n =
(cond
((eq n 0) 1)
(else (mult n (factorial (sub n 1))))))
(print (factorial 10))
</code></pre>
这会打印:<p><pre><code> 3628800
</code></pre>
或者一个精确的调和级数和:<p><pre><code> #lang attalambda
(print
(reduce add 0
(map (lambda (n)
(unwrap-ok (div 1 n)))
(range 1 8))))
</code></pre>
这会精确打印:<p><pre><code> 363/140
</code></pre>
据我所知,没有哪门编程语言结合了所有这些特性:Michaelson 式的、由无类型 lambda 构建的类型标签,由二进制数字列表支持的精确有理数,作为 lambda 值的错误,以及几乎所有计算都保留在 lambda 核心中的真实世界程序。这些特性本身都不是全新的,但我不知道有其他语言以这种方式将它们结合起来。<p>下载:
<a href="https://github.com/kserrec/attalambda/releases/tag/v0.7.0" rel="nofollow">https://github.com/kserrec/attalambda/releases/tag/v0.7.0</a><p>代码:
<a href="https://github.com/kserrec/attalambda" rel="nofollow">https://github.com/kserrec/attalambda</a><p>原始 All The Lambdas:
<a href="https://github.com/kserrec/all_the_lambdas" rel="nofollow">https://github.com/kserrec/all_the_lambdas</a>
26 分•作者: thingsilearned•6 天前
26 分•作者: tomjakubowski•1 天前
26 分•作者: z-mach9•1 天前
25 分•作者: ilamont•7 天前
25 分•作者: ibobev•2 天前
25 分•作者: rdmuser•6 天前
25 分•作者: Lwrless•7 天前
25 分•作者: NKosmatos•6 天前
25 分•作者: eccgecko•3 天前
25 分•作者: yosito•5 天前
25 分•作者: etoxin•4 天前
24 分•作者: bobbydigitales•2 天前
24 分•作者: ronreiter•大约 15 小时前
24 分•作者: nateb2022•大约 8 小时前
24 分•作者: grigolin•3 天前
24 分•作者: talhof8•4 天前
24 分•作者: chaostaco•7 天前
我正在做一个关于我1996年左右的386图形代码的网页项目,当我看到与最近纳维-斯托克斯平滑问题解决方案相关的可视化时,我想到“这在90年代风格的演示中看起来会很酷”。所以,这是我的成果:一个调色板循环器和一个粒子动画,两者都使用了真实的方程,并且都是小于1KB的二进制文件,通过js-dos/DOSBox在线渲染,同时也有JavaScript移植版本,可以超越386的质量。所有源代码和预编译的386二进制文件都包含在内,并且在各方面都是免费的。
我知道这在HN上会引起争议,所以我应该坦诚地说,这项工作是AI辅助的,但嘿,OpenAI解决千禧年难题(启发了我这项工作)也是AI辅助的。