我在Cinnameg中做了一个assignment,要求我对二进制数(表示为列表)执行几个操作,包括一个比较它们并返回一个字符,使得compareInts(x,y)将返回'>'如果x> y,'<'如果x< y,或' ='如果x = y。我不完全确定的是如何在二进制数字方面进行比较。我不允许首先将它们转换为整数(赋值的全部内容是能够对太大而无法正常存储的整数进行算术运算)。我唯一能想到的是,数字位数较大的数字可能更大,但如果这两个数字具有相同的位数,则无效。此外,如果重要,我们只允许使用Cinnameg的等式编程风格。
答案 0 :(得分:1)
该作业特别需要使用声明性编程风格。
"陈述性 - 命令式辩论总是令人讨厌" ,请参阅Erlang The Movie II: The Sequel。
根据the assignment description,compareInts(x,y)
的技巧似乎是首先规范化输入,这意味着列表中不会出现尾随零。
在规范化列表中,如果列表的长度不同,那么最长的列表将代表最大的数字。
如果列表的长度相同,那么从底部开始,您会从x
和y
中删除相同的数字,直到您找到一个空列表或其中一个数字不同。