Haskell的元组可以编写为
(a,b,c)不过,这只是语法上的糖
(,,)a b c通常情况下,n元组可以用n-1 ,s在(.)之间形成,然后用空格分隔其元素。例如,7-tuple,(1,2,3,4,5,6,7)可以由
(,,,,,,)1 2 3 4 5 6 7由于Haskell没有一元组,所以不能形成它们。你也将不对空元组负责。
嵌套元组可以使用parens来重写操作顺序。
((1,2),3) == (,)((,)1 2)3作为我们的追求从Haskell中移除所有的语法糖的一部分,我将要求您编写一个程序,从Haskell的元组中删除语法糖。
您的程序应该使用一个元组、一个数组或一个表示含糖元组的字符串,并且应该输出一个表示“无糖”元组的字符串。输入元组将只包含正整数或其他元组。
由于我们在这里打高尔夫球,你的产量应该很短。它不应该包含不必要的
)或(之前。这是一个密码-高尔夫问题,所以答案将以字节表示,而更少的字节更好。
(1,2) -> (,)1 2
(1,2,3) -> (,,)1 2 3
((1,2),3) -> (,)((,)1 2)3
(1,2,3,4) -> (,,,)1 2 3 4
(1,(2,3)) -> (,)1((,)2 3)
(10,1) -> (,)10 1发布于 2017-09-05 18:42:10
发布于 2017-09-04 17:47:21
发布于 2017-09-05 08:27:34
{Y"()"b:yJ',X#a-1Fcab.:c>0?s.cyJ(fc)bR") "')}这是一个以列表作为参数的函数。在网上试试!
; Define an anonymous function (the argument is available inside as the variable a)
{
; Yank the string "()" into y variable
Y "()"
; Create a string of len(a)-1 commas, join y on it, and assign to b
b: y J ',X#a-1
; For each item c in a
F c a
; Concatenate to b the following expression
b .:
; Is c integer or list?
; (If c is a positive integer, c>0 is true; but if c is a list, c>0 is false)
c>0 ?
; If c is integer, concatenate space followed by c
s.c
; If c is list, call function recursively on c and use the result to join y
yJ(fc)
; Replace ") " with ")" in b and return the resulting string
b R ") " ')
}https://codegolf.stackexchange.com/questions/141584
复制相似问题