问题标签 [factor-lang]
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.
object - 为什么不是“实例?”这个词?
许多对象感知脚本语言都有一个运算符或函数来测试对象是否是给定元组或类型的实例化。JavaScript 有instanceof
操作符,Python 有isinstance
内置函数和issubclass
内置函数,等等。
但在 Factor 中,所有元组类和对象类型都有自己的instance?
词:
船就是船,车就是车。汽车不是船。
我们可以改写最后两行,如:
相反,Factor 中的每个对象都有自己的专用instance?
词。这只是为了简洁和可读性,还是有实现原因?
出于某种原因,是否想instance?
在某些对象上自定义单词?我们有通用的...
combinators - 切割运行时计算值?
Cleave 是一个非常有用的组合器,可以最大限度地减少代码重复。假设我想对Abundant、Perfect、Deficient 数字进行分类:
range>adp-classes
无法编译,因为“无法将 cleave 应用于运行时计算值”。
如果我不能使用 cleave,那么我基本上必须这样做:
这是蹩脚和更长的,如果键字符串数组更长,它会变得非常丑陋和长。此外,重要的是,如果键数组是在运行时生成的,那么不使用 cleave 是不可能的。
同样对于print-adp-stats
: 没有cleave
我将不得不在我的源代码中放置这个文字:
总的。
是否有组合器可以替换cleave
运行时计算值?我可以通过其他方式最小化丑陋的重复,同时仍然允许在运行时计算吗?
recursion - 如何停止递归?
代码第一天的出现需要以一种或另一种形式循环在一长串括号中,例如((((())(())(((()))((
等。这个想法是(
上一层“楼层”,)
下一层,目标是打印
- 楼层号为负的字符串中的第一个索引,并且
- 找到字符串末尾时的最后一层。
带有 for 循环的命令式解决方案很简单(以 Python 为例):
递归函数解决方案稍微复杂一些,但仍然不太难。
这两个都给出了正确的输出
当针对我的挑战输入运行时。
除了第二个是愚蠢的,因为 Python 没有尾调用优化,但没关系
我如何在 Factor 中实现其中任何一个?自从我开始使用 Factor 以来,我一直对此感到困惑。
我们不能只使用 for 循环,因为没有等价物可以让我们在迭代之间保持可变状态。
我们可以使用递归解决方案:
太好了,那是一具骷髅,但它的身体里有day-1-worker
什么?Factor 没有任何方法可以从递归调用中“提前返回”,因为没有办法反向运行程序,也没有返回的概念——这没有任何意义。
我觉得递归可能不是 Factor 中这个问题的答案。如果是,我如何停止递归?
glob - 在 Factor 中获得与 coreutils sha224sum 相同的 SHA-224 总和
使用 Factor 的 glob 和 shell 的 glob 的输出是相同的。输出上的Adiff
表明它们完全匹配。
但是校验和不匹配,校验和也不匹配md5
。为什么是这样?如何在 Factor 中获得与 coreutils 中相同的校验和sha224sum
?
将编码更改为ascii
不会更改输出,也不会"\n" join sha-224 checksum-bytes
更改checksum-lines
.
factor-lang - 循环输入引号与预期效果不符
我正在尝试编写一个文本编辑器来模仿ed
. 在ed
中,您一次写入一行输入,并在您输入一行时完成.
。这是我想出的:
此代码段一次从用户那里获取一行输入,当它到达一个点时停止,并返回一个字符串数组。
当它单独出现时,我没有收到任何错误,但是一旦我尝试把它变成一个词:
我收到以下错误:
我认为这可能与编译器不关心堆栈声明有关,当它不在一个单词中时,而不是在它的时候。修改循环下的堆栈是否不满意?我知道call( )
,但是如果我需要在这里使用它,怎么办?
编辑:我也尝试了以下方法:
我得到一个类似的错误,但是堆栈效果略有不同:
同样,它本身很好,但总而言之,它不能编译。
factor-lang - 如何立方一个数字因数?
我正在和 Factor 一起玩,试图对串联编程有一点了解。写一个词来平方一个数字是微不足道的:
但是对于我的生活,我似乎无法弄清楚如何对一个数字进行立方:
不起作用,因为推断的堆栈效果( x x x -- x )
类似
也失败了。
如果我要硬编码一个立方体,我会做这样的事情:
这就是为什么我的天真猜测会是表格 b。
正如我所说,我只是在玩 Factor,并且很想知道我在这里缺少什么——但这主要是出于我的好奇心。
shell - 我如何在因素因素中保留 Shell 脚本之外的更改目录?
我在文件中有以下因子代码:
当我尝试从因素运行脚本时,我收到此错误:
如果不是USING: shell ;
我有,我可以让它USING: io.files.private
运行,但在脚本运行之外没有保留目录更改。我假设使用 shell 会导致目录更改持续存在——我意识到这可能是一个错误的假设。如何编写脚本来更改目录并使目录更改在脚本之外持续存在?
Windows 7(是的,我知道 Windows 上的目录分隔符通常是\
,我也尝试过 '\'。但/
实际上也适用于 Windows。除了当我使用 io.files.private 时路径有效)。
Windows 上的系数 0.98 x86.64(1788,heads/master-e187d63d3c,Tue Oct 18 02:14:22 2016)[Microsoft Visual C++ 190023506]
stack - 因子编程语言:设置 .factor-roots 配置
我下载了适用于 Mac 的Factor编程语言。我现在可以factor
成功地从命令行启动命令。我在一本涵盖这种语言的书中读到(...中的七种语言),要运行独立程序,我需要指出 Factor 将从中搜索词汇表的根路径。因此,我必须在我的主目录中创建一个.factor-roots
文件,指示我拥有 Factor 源文件的根目录的完整路径,每行一个路径。我的因素文件夹在/Applications
文件夹中。因子目录包含:
我应该在.factor-roots
文件中准确地写什么,以使其工作?