Factor语言编程示例
语言简介
https://rosettacode.org/wiki/Category:Factor
Factor 是一种基于堆栈的、串联的通用编程语言,注重实用性。
Factor 最初由 Slava Pestov 开发,于 2003 年作为一种为游戏编写的脚本语言诞生。该实现最初是用Java编写的解释器,但后来获得了优化编译器,并使用最小的C++核心在 Factor 中进行了重写。在此处阅读有关 Factor 实施历史的更多信息。截至 2020 年 6 月,Factor 仍在由多个贡献者开发,最新稳定版本已于 2018 年 7 月发布。
Factor 是一种类似于 Forth 的堆栈语言,但级别比Forth更高。Factor 是一种连接语言,这意味着我们不是将函数应用于参数(应用语言)来评估事物,而是编写函数来评估单个数据——直到该特定点的整个程序。在Factor中,数据流的基本结构是函数组合。也就是说,foo bar baz相当于baz(bar(foo()))应用语言中的。这提供了一种很好的从左到右的阅读方式和数据流。
示例1
! 中文注释
#! 中文注释,判断一个数字正着写和反过来写是不是都是完全平方数。
#! 注意,【关键字、特殊符号】之间的空格不能省略。
USING: formatting io kernel math.parser project-euler.common sequences ;
IN: yhm138
read-lines [ dec> ] map dup
[ >dec dup reverse [ dec> perfect-square? ] both? ]
map [ "%-13d -> %u\n" printf ] 2each
示例2
#! 中文注释,对一个数进行素因子分解,底数和指数构成的列表里有多少个本质不同的素数。
USING: accessors assocs compiler.utilities io kernel math
math.parser math.primes math.primes.factors namespaces
prettyprint quotations sequences sequences.deep ;
IN: yhm138
: f ( n -- m )
group-factors flatten unique values [ prime? ] filter length ;
24 f .
126 f .
8 f .
64 f .
72 f .
8640 f .
317011968 f .
27 f .
示例3
USING: arrays io kernel math prettyprint sequences ;
IN: yhm138
! 二项式系数
: fact ( n -- n-factorial )
dup 0 = [ drop 1 ] [ dup 1 - fact * ] if ;
: choose ( n k -- n-choose-k )
2dup - [ fact ] tri@ * / ;
5 3 choose .
常用word
USING: formatting io kernel math.parser project-euler.common sequences accessors arrays assocs combinators.extras kernel math math.combinatorics sequences ;