问题标签 [esoteric-languages]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
esoteric-languages - 深奥的语言有什么实际用途吗?
你知道任何用于编写任何实际使用的真实世界程序的深奥语言的例子吗?是否存在任何计算机科学领域(无论多么晦涩),其中深奥的语言实际上已被证明可用于解决特定问题?
c# - 如何判断一种语言是否是“动态语言”?
我试图更好地理解语言“动态”的真正含义。我对Lingo有相当多的经验,它是 Adobe(以前的 Macromedia)Director 产品线的脚本语言,我只是想知道它是否会被视为“动态语言”。
处理变量和列表的方式对我来说似乎非常“动态语言”。
使用变量,您只需编写foo = 3
or bar = "Hello World"
。您没有将变量声明为 anint
或string
--it 按原样计算。
使用列表,您可以编写类似miscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]]
. 这不类似于 atuple
吗?
这些功能是否足以符合“动态语言”状态?
有趣的是,我使用 C# 的次数更多,而使用 Director/Lingo 的次数更少,但是这些天对动态语言的兴奋之情,我想知道我是否真的违背了规律。
编辑
关于 Mark Rushakoff 的回答,下面是使用此Wikipedia 文章分析 Lingo 是否符合“动态”条件的尝试:
Eval
- 行话有do
和value
关键字。do
将执行整个命令,例如,do "foo = 23"
或do "foo = sum(20, 3)"
。value
尝试将字符串转换为数字,但它不仅仅是一个解析运算符——它实际上可以将一个变量的字符串表示形式转换为它的数字,例如,假设foo = 23
,该语句value("foo")
将计算为 23。高阶函数——如果我理解正确的话,这基本上就是我在 C# 中被称为“代表”的东西。据我所知,Lingo 不直接支持这一点,尽管您可以创建一个具有函数的类型(称为“父脚本”)并传递该类型的实例。
闭包 - 据我所知,不支持这个。
继续——据我所知,不支持这个。
反思——至少在某种意义上,是的。您实际上是使用字符串创建类型的新实例,例如
fooInstance = script("Foo").new(bar)
. 也可以将类型的实例转换为包含类型名称的字符串(这样您就可以模仿 c# 的GetType()
功能)。您还可以在不知道属性名称的情况下查询类型的属性(例如,通过索引查找属性)并通过索引找出属性的名称。宏 - 维基百科文章描述宏的方式,我不这么认为。但是,可以在运行时编辑脚本,所以这可能很重要。
所以,看起来 Lingo 在动态特性上得分 2 到 3(满分 6 分),但我对闭包和延续还不够清楚,无法确定 Lingo 不支持它们。我想我不确定要得出什么结论。欢迎评论。
code-golf - 代码高尔夫:Fractran
挑战
编写一个充当Fractran解释器的程序。在任何语言中,按字符数计算最短的口译员获胜。您的程序必须有两个输入:要执行的 fractran 程序和输入整数 n。该程序可以是任何对您的程序方便的形式——例如,2 元组列表或平面列表。输出必须是单个整数,即执行结束时寄存器的值。
分形
Fractran 是John Conway发明的一种微不足道的深奥语言。fractran 程序由正分数列表和初始状态 n 组成。解释器维护一个程序计数器,最初指向列表中的第一个部分。Fractran 程序按以下方式执行:
- 检查当前状态与当前程序计数器下的分数的乘积是否为整数。如果是,则将当前状态乘以当前分数并将程序计数器重置到列表的开头。
- 推进程序计数器。如果到达列表的末尾,则停止,否则返回步骤 1。
有关 Fractran 工作方式和原因的详细信息,请参阅esolang 条目和关于好数学/坏数学的这个条目。
测试向量
程序: [(3, 2)]
输入: 72 (2 3 3 2 )
输出: 243 (3 5 )
程序: [(3, 2)]
输入: 1296 (2 4 3 4 )
输出: 6561 (3 8 )
程序: [(455, 33), (11, 13), (1, 11), (3, 7), (11, 2), (1, 3)]
输入: 72 (2 3 3 2 )
输出: 15625 (5 6 )
奖金测试向量:
您的提交不需要正确执行最后一个程序即可成为可接受的答案。但如果是这样,那就太棒了!
程序: [(455, 33), (11, 13), (1, 11), (3, 7), (11, 2), (1, 3)]
输入: 60466176 (2 10 3 10 )
输出: 7888609052210118054117285652827862296732064351090230047702789306640625(5 100)
提交和评分
程序严格按字符长度排列 - 最短最好。随意提交布局合理且文档化的代码以及“缩小”版本的代码,这样人们就可以看到发生了什么。
语言“J”是不可接受的。这是因为在其中一个链接页面上 J 中已经有一个众所周知的解决方案。如果你是J迷,对不起!
然而,作为额外奖励,任何可以在 fractran 中提供工作的 fractran 翻译的人都将获得 500 声望点奖励。万一出现多个自托管口译员,分数最少的口译员将获得赏金。
优胜者
在提交了一个包含 1779 个分数的自托管 fractran 解决方案后,官方获胜者是Jesse Beder 的解决方案。但是,实际上,即使执行 1+1,该解决方案也太慢了。
令人难以置信的是,这已经被另一种分形解决方案打败了——阿玛迪乌斯的解决方案只有 84 个分数!在我的参考 Python 解决方案上运行时,它能够在几秒钟内执行前两个测试用例。它对分数使用了一种新颖的编码方法,这也值得仔细研究。
荣誉提及:
- Stephen Canon 的解决方案,165 个字符的 x86 程序集(28 个字节的机器码)
- Jordan 的52 个 ruby 字符解决方案 - 处理长整数
- Useless 的87 个 Python 字符的解决方案,虽然不是最短的 Python 解决方案,但它是为数不多的非递归解决方案之一,因此可以轻松处理更难的程序。它的可读性也很强。
esoteric-languages - 实用的 COW 示例程序?
有没有人用COW写过长或短的程序来演示它可以做什么?当然,语言是个笑话。但是由于它是图灵完备的,也许有人写了一种高级语言,可以翻译成 COW。在编写了一个简短实用的程序之后,至少可以显示您在屏幕上输入的内容,人们会认为有人用该语言编写了一个更有趣的应用程序。
programming-languages - 你写过自己的深奥(或不)语言吗?它看起来像什么?
我已经看到一些关于 stackoverflow 用户最喜欢的深奥(或不是)编程语言的问题。还有关于语言实施的问题。但是,我很想知道你们中是否有人真正编写过自己的编程语言(无论是否深奥),我也想知道它是什么样子的。
我喜欢阅读并尝试学习新的和创造性的语言,所以我认为很高兴看到 stackoverflow 社区提供的东西。:)
几年前我写了一个好玩的。
programming-languages - 你能帮我想想我的编程语言的问题吗?
我用(现在)工作的解释器创建了一种实验性玩具编程语言。它是图灵完备的,并且具有相当低级的指令集。
即使一切都需要比 PHP、Python 或 Ruby 多四到六倍的代码和时间,我仍然喜欢用它编写各种东西。
所以我得到了用多种语言编写的“基本”东西:
- 你好世界
- 输入 -> 输出
- 倒计时(没有你想象的那么容易,因为没有循环)
- 阶乘
- 阵列仿真
- 99瓶啤酒(简单,错误的变形)
- 99瓶啤酒(规范)
柯拉兹猜想
奎因(那是一个有趣的!)
- Brainf*ck 解释器(为了证明图灵完备,让我很开心)
所以我实现了上述所有示例,因为:
- 他们都使用了语言的许多不同方面
- 他们很有趣
- 他们不需要花几个小时来写作
现在我的问题是:我的想法已经用完了!我找不到更多使用我的语言可以解决什么问题的例子。
- 您是否有任何符合上述某些标准的编程问题供我解决?
esoteric-languages - Piet中的DP和CC如何变化?
根据规范,
黑色色块和程序的边缘限制了程序流程。如果 Piet 解释器试图移入黑色块或离开边缘,它会停止并切换 CC。然后解释器再次尝试从其当前块移动。如果第二次失败,DP 将顺时针移动一步。重复这些尝试,在交替尝试之间更改 CC 和 DP。如果在八次尝试之后解释器不能离开它当前的色块,就没有出路并且程序终止。
除非我读错了,否则这与此处的斐波那契数列示例的行为不一致:
(来自:http ://www.dangermouse.net/esoteric/piet/samples.html )
具体来说,为什么 DP 碰到左边缘时会在 (0,3) 处左转((0,0) 是 (top, left))?此时,DP 和 CC 都是 LEFT,所以,根据我的阅读,顺序应该是:
- 尝试(但失败)通过在 (0,4) 处离开边缘来离开块,
- 将 CC 切换到右侧,
- 通过在 (0,2) 处离开边缘来尝试(并失败)离开块。
- 将 DP 旋转到 UP,
- 通过进入 (1,1) 处的白色块尝试(并成功)离开 (1,2) 处的块
跟踪指示的行为似乎是 DP 一直旋转,将 CC 留在左侧。
我误解了什么?
accumulator - HQ9+ 中的“累加器”是什么?
我刚刚阅读了一些关于 HQ9+ 编程语言的信息:
- https://esolangs.org/wiki/HQ9+ ,
- https://en.wikipedia.org/wiki/HQ9+和
- https://cliffle.com/esoterica/hq9plus ,
它告诉我一些关于所谓的“累加器”的信息,它可以递增,但不能访问。此外,使用+
不会操纵结果,因此输入
给出结果:
谁能解释一下它是如何工作的,它有什么作用,以及它是否有意义?谢谢。
emacs - GNU Emacs 有 Intercal 模式吗?
我找不到 GNU Emacs 的Intercal模式。有吗?