问题标签 [concatenative-language]

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.

0 投票
7 回答
3990 浏览

programming-languages - Explain concatenative languages to me like I'm an 8-year-old

I've read the Wikipedia article on concatenative languages, and I am now more confused than I was when I started. :-)

What is a concatenative language in stupid people terms?

0 投票
8 回答
2651 浏览

forth - 串联编程语言的实际使用

使用ForthFactorJoy连接语言完成的实际项目有哪些?

0 投票
2 回答
2701 浏览

lambda - 组合子在串联/默示编程语言中的作用

高阶组合器(或函数生成器)在串联隐性编程中究竟扮演什么角色?

是否有另一种方法来实现串联编程语言而不是直接操作堆栈?

所提到的组合子与Schonfinkel组合逻辑之间的关系有多紧密?

0 投票
3 回答
550 浏览

java - Java中的连接语言解释器

我有兴趣在 Java中找到一种连接语言解释器。理想情况下,它应满足以下条件:

  • 它有一个解释器,而不是(仅)一个用于 JVM 的字节码编译器。
  • 该语言本身具有不错的文档,不仅有几个示例和“我有一天会记录其余部分”的通知。
  • 该项目并未完全放弃。

简而言之,我正在寻找一种可以轻松嵌入到 Java 中的合理“活跃”的连接语言。

0 投票
3 回答
1038 浏览

lisp - Lisp 对 Factor 编程语言的影响?

我(来自 Slava Pestov)读到 Factor 受到 Lisp 的影响,但我不确定我能理解如何?他们不是非常不同的编程语言吗?

0 投票
0 回答
300 浏览

postfix-notation - 应用语言可以使用后缀表示法吗?

我一直发现像 Factor 这样的后缀语言比前缀(Lispy 语言)和中缀/后缀语言(所有 C 风格的语言,如果我们同时包含运算符和函数)更具可读性。

与前缀语言不同,您不需要处处使用分隔符。与中缀表示法不同,没有复杂的优先顺序要记住。有什么不喜欢的?

这些语言似乎都是串联的,因此几乎总是基于堆栈的。

是否可以实现一种现代语言,它适用于连接,并且仍然基于后缀?

0 投票
2 回答
1165 浏览

haskell - Haskell 中的行多态性:用“转换”编写 Forth DSL 的麻烦

最近 Haskell 博客活动1启发了我,尝试在 Haskell 中编写类似 Forth 的 DSL。我采用的方法既简单又令人困惑:

对于做简单的事情,这非常有效:

简单的函数可以很容易地转换为相应的堆栈转换。到目前为止,一些游戏产生了令人愉快的结果:

当我尝试用高阶函数扩展它时,麻烦就来了。

call应该通过基本上将转换(保持在堆栈的顶端)“应用”到它的“其余部分”(s :> (s :~> s'))来将 form的堆栈转换为 form 。s我想它应该像这样工作:

但实际上,它给了我一个巨大的类型不匹配错误。我究竟做错了什么?“堆栈转换”表示可以充分处理高阶函数,还是我需要调整它?

1注 与这些人的做法不同start push 1 push 2 add end,我希望它是,而不是 ,我runF $ start (push 1) (push 2) add的想法是也许以后我可以使用一些类型类魔法来使push某些文字隐含。

0 投票
1 回答
312 浏览

continuations - 调用堆栈?保留堆栈?名称堆栈?

Factor 手册的这一页讨论了存储在延续中的这些类型的堆栈:

  • 数据栈
  • 保留堆栈
  • 调用栈
  • 名称堆栈
  • 捕捉堆栈

这些堆栈到底有什么?对我来说最令人困惑的三个是调用堆栈、保留堆栈和名称堆栈。

0 投票
4 回答
1296 浏览

programming-languages - 连接语言可以使用前缀表示法吗?

级联语言有一些非常有趣的特性,例如能够组合不同数量的函数,并且能够分解出函数的任何部分。然而,许多人不屑一顾,因为它们使用了后缀表示法,而且很难阅读。另外,波兰人可能不喜欢人们倒着使用他们精心制作的符号。

那么,是否可以有前缀符号?如果是,那么权衡是什么?

我知道它是如何工作的,但我对连接语言没有经验,所以我可能遗漏了一些东西。基本上,一个函数将以相反的顺序被评估,而值将从堆栈中以相反的顺序被拉出。为了证明这一点,我将比较后缀和前缀的样子。以下是一些使用传统后缀表示法的连接表达式。

表达式从左到右计算:在第一个示例中,5被压入堆栈,然后dup复制堆栈顶部的值,然后将堆栈*顶部的两个值相乘。函数首先从堆栈中提取最后一个参数:在第二个示例中,-调用时2位于堆栈顶部,但它是最后一个参数。

这是我认为前缀表示法的样子:

表达式从右到左求值,函数首先从堆栈中提取它们的第一个参数。请注意前缀过滤器示例如何与其描述更接近,并且看起来与应用样式相似。我注意到的一个问题是考虑因素可能没有那么有用。例如,在后缀表示法中,您可以2 -从中分解3 2 -以创建减法函数。在前缀表示法中,您可以从中分解- 3- 3 2创建一个subtractFromThree 函数,这似乎没有那么有用。

除非有任何明显的问题,否则使用前缀表示法的连接语言可能会赢得不喜欢后缀表示法的人的青睐。任何见解都值得赞赏。

0 投票
1 回答
563 浏览

concurrency - 连接语言和并发 - 原则上有困难吗?

连接语言中的并发性是否存在原则问题,还是只是缺少?

还是我只是错过了什么?

据我所知,目前最先进的连接语言是Factor,它仍然只有一个不使用多核的协作线程系统

也许 Factor 的发明者 Slava Pestiv 已经被 Google 消耗得如此之多,以至于他根本没有时间创建一个多核版本。

据我了解,演员模型应该非常适合连接语言。然而,这是一个相当困难的领域。知道什么样的模型会很好用吗?