在定义时分配反函数
Assigning an inverse function at definition time
我写了一个小玩具十六进制转换器;我有编码和解码功能:
encode16 =: { & '0123456789ABCDEF' @ ((6 $ 16) & #:)
decode16 =: (16 & #.) @ ('0123456789ABCDEF' & i.)
我希望它们互为反函数,这样我就可以编写代码并看到如下内容:
119&+ &. decode16 '03A8D8'
03A94F
我的第一个猜测是添加这个:
encode16 =: encode16 :. decode16
这会产生递归,所以我决定改为:
encode16basic =: { & '0123456789ABCDEF' @ ((6 $ 16) & #:)
decode16basic =: (16 & #.) @ ('0123456789ABCDEF' & i.)
encode16 =: encode16basic :. decode16basic
decode16 =: decode16basic :. encode16basic
这是处理反函数的典型方式吗?人们通常会在定义时分配反函数吗?是否真的有必要将逆函数分配给编码和解码函数?似乎是这样,因为文档没有另外说明。
定义它们的一个选项可能是:
encode16=: ({&'0123456789ABCDEF'@((6)&#:)) :. ((16&#.)@('0123456789ABCDEF'&i.))
decode16=: encode16^:_1
119&+&.decode16 '03A8D8'
03A94F
您可以按如下方式检查动词的正面:
decode16 b. _1
encode16
encode16 b. _1
16&#.@('0123456789ABCDEF'&i.) :.({&'0123456789ABCDEF'@(16 16 16 16 16 16&#:))
查看 wiki page for Obverse 了解更多详情。
我写了一个小玩具十六进制转换器;我有编码和解码功能:
encode16 =: { & '0123456789ABCDEF' @ ((6 $ 16) & #:)
decode16 =: (16 & #.) @ ('0123456789ABCDEF' & i.)
我希望它们互为反函数,这样我就可以编写代码并看到如下内容:
119&+ &. decode16 '03A8D8'
03A94F
我的第一个猜测是添加这个:
encode16 =: encode16 :. decode16
这会产生递归,所以我决定改为:
encode16basic =: { & '0123456789ABCDEF' @ ((6 $ 16) & #:)
decode16basic =: (16 & #.) @ ('0123456789ABCDEF' & i.)
encode16 =: encode16basic :. decode16basic
decode16 =: decode16basic :. encode16basic
这是处理反函数的典型方式吗?人们通常会在定义时分配反函数吗?是否真的有必要将逆函数分配给编码和解码函数?似乎是这样,因为文档没有另外说明。
定义它们的一个选项可能是:
encode16=: ({&'0123456789ABCDEF'@((6)&#:)) :. ((16&#.)@('0123456789ABCDEF'&i.))
decode16=: encode16^:_1
119&+&.decode16 '03A8D8'
03A94F
您可以按如下方式检查动词的正面:
decode16 b. _1
encode16
encode16 b. _1
16&#.@('0123456789ABCDEF'&i.) :.({&'0123456789ABCDEF'@(16 16 16 16 16 16&#:))
查看 wiki page for Obverse 了解更多详情。