我如何从一个列表作为方案的参数传递一个数字?

我需要从列表中取号,并将其转换为一个数字,这样我可以把它作为一个参数。

即时试图使在方案1位加法器。 我写的代码,或门和异或门,也是半加器和现在即时通讯试图所有这些结合起来,使全加器。 林不知道如果我去了解它的正确方法。 任何输入可以理解的谢谢你。

(define or-gate (lambda (ab) (if (= a 1) 1 (if (= b 1) 1 0)))) (define xor-gate (lambda (ab) (if (= ab) 0 1))) (define ha (lambda (ab) (list (xor-gate ab)(and-gate ab)))) (define fa (lambda (ab cin) (or-gate (cdr(ha cin (car (ha ab))))(cdr(ha ab)))))

当我运行程序我得到的问题是,半加器(HA)功能的列表作为输出的值,这使得不兼容的价值观与我的其他程序,因为他们需要的数字,而不是名单。 我觉得有一个简单的解决方案,但我不知道它。

--------------解决方案-------------

这将是一个更容易阅读你的代码,如果你有一个合同; 我花了一段时间来推断,你半加器返航位的名单。

接下来,它看起来像你对我遇到与“CDR”一个简单的问题。 在“CDR”操作不返回一个列表的第二个元素,但在列表的“休息”。 检查出(CDR(表1 1))和1.第一产生含有1列表之间的差,第二个产生数字1。

为避免混淆,使用的程序是一个好主意firstsecond代替carcadr用于访问列表的第一和第二元件分别。 请注意, cdr 不会返回一个列表的第二个元素,而是返回一个列表,这是另一个列表的其余部分

无论如何, fa在这个问题的过程不看我的权利。 应当返回与两个清单sumcout值。 这里是一个可能的方式来实现它,使用firstsecond的建议:

(define fa
(lambda (ab cin)
(list (first (ha a (first (ha b cin))))
(or-gate (second (ha a (first (ha b cin))))
(second (ha b cin))))))

...但是这看起来混乱。 请注意,我们计算(ha b cin)三个部分,一个更好的想法是,以节省重复计算在一个变量,就像这样:

(define fa
(lambda (ab cin)
(let* ((partial1 (ha b cin))
(partial2 (ha a (first partial1))))
(list (first partial2)
(or-gate (second partial2) (second partial1))))))

最后要注意,在书中SICP有一个非常好的实现加法器作为数字电路仿真的一部分,看看它如何改善你的代码的进一步设想。

分类:名单 时间:2012-09-27 人气:0
本文关键词: 方案列表,参数
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.813 (s). 10 q(s)