dfz (02/02/83)
Well, I was inundated with exactly zero replies to my "FP puzzle" of a few weeks ago. But here's the answer anyway: Assume the following notation: apply-to-all: @ composition: . condition: -> ; construction: [] left insert < right insert: > constant function x: $x selector function x: ?x tail of a list tl head of a list hd arithmetic equality eq append left apl append right apr Then Backus' null function is: count = >+.@$1 {count the elements of a list} null = eq.[count,$0] {Backus' null function} By the way, the above definition would not work if not for Backus' extension to the definition of "insert right". Why? Distribute from left is: cnt1 = eq.[count,$1] {list contains one element?} d1l = [?1,?1.?2] {distr. from left for 1-elt list} {generalized distribute from left} distl = null.?2 -> ?2 ; cnt1.?2 -> [d1l] ; apl.[d1l,distl.[?1,tl.?2]] Distribute from right is: last = eq.[count,$1] -> ?1 ; ?2.<id {last element of a list} d1r = [last.?1,?2] {distr. from right for 1-elt list} {generalized distribute from right} distr = null.?1 -> ?1 ; cnt1.?1 -> [d1r] ; apr.[distr.[hd.?1,?2],d1r] These are only representatives of a large set of reasonable answers to the puzzle. If you can think of more efficient or elegant answers, please send them in. Dave Ziffer ..!decvax!ihnss!iwlc7!dfz