欢迎访问yhm138的博客园博客, 你可以通过 [RSS] 的方式持续关注博客更新

MyAvatar

yhm138

HelloWorld!

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

ATO上运行

! 中文注释
#! 中文注释,判断一个数字正着写和反过来写是不是都是完全平方数。
#! 注意,【关键字、特殊符号】之间的空格不能省略。

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

ATO上运行

#! 中文注释,对一个数进行素因子分解,底数和指数构成的列表里有多少个本质不同的素数。


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 ;
posted @ 2023-07-20 19:59  yhm138  阅读(111)  评论(0编辑  收藏  举报