如何使用数据流组合子消除Factor语言词定义中的冗余代码
要求的mod3and5实现
1. 输出两个栈余数的版本
栈效果:( n -- rem3 rem5 )
输入11时栈最终会保留2 1,实现代码:
: mod3and5 ( n -- rem3 rem5 ) { 3 5 } swap [ mod ] with map first2 ;
2. 输出余数数组的版本
栈效果:( n -- mod-array )
输入11时返回数组{ 2 1 },实现代码:
: mod3and5 ( n -- mod-array ) { 3 5 } swap [ mod ] with map ;
通用整除判断优化
你原来的整除判断可以直接基于上面的逻辑改造成支持任意数量除数的通用版本,完全不需要重复写mod:
: any-divisible? ( n divisors -- ? ) swap '[ _ mod 0 = ] any? ; ! 对应原来的3或5整除判断用法示例:10 { 3 5 } any-divisible? → 返回t
如果你还是要保留原来的单参数接口,直接封装即可:
: 3or5divisible ( n -- ? ) { 3 5 } any-divisible? ;
内容的提问来源于stack exchange,提问作者primfaktor
相关产品推荐
相关产品推荐

