2011-04-20 62 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