2011-04-20 63 views
1

在接下来的代码方案 - 功能 “如果”

(if (exp1) 
    (Do1) 
    (Do2)) 

(DO1)是当EXP1是真实发生的事情。我的问题,我想要做两个事情,如果条件是真的。含义 - 我想添加一个链接到列表,并且再次调用该函数。

so Do1 in my program is: 
      ((cons (car hello) list1) 
      (Myfunction (cdr data) list1)) 

和它给我的下一个问题:

procedure application: expected procedure, given: ((439043 Mylist)); arguments were:() 

我该怎么办呢?

谢谢。

回答

3

您可以使用(begin)把一堆报表成一个组合。 但是,我不认为这就是你想要的。(cons (car hello) list1)有什么作用?没有。 (cons)返回列表,它不会改变它的任何参数。

所以,事实上,我想你想do1(Myfunction (cdr data) (cons (car hello) list1))

这只是一个单独的语句,可以在你的(if)的结果,而不去使用(begin)

+0

谢谢!谢谢!它的工作原理(开始并没有在运行时帮助) – Tom 2011-04-20 13:17:25

+0

'开始'没有帮助的原因是'cons'在该版本中没有做任何事情。只有以!结尾的函数(比如'set!')在Scheme中改变它们的参数。 – drysdam 2011-04-20 13:25:15

5

只需使用begin - 例如:

(begin 
     (cons (car hello) list1) 
     (Myfunction (cdr data) list1)) 
+0

尽管在语法上这是正确的答案,drysdam的确提出了一个好的观点 - 你确定你不需要(cons)的结果吗? – 2011-04-20 12:39:14