Вы очень близки, вы должны просто использовать форму let
вместо def
здесь:
(defn create-contest
"Creates a monty hall doors contest"
[n]
(let [door-with-car (rand-int n)] ;; let instead of def
(map
(fn [i] (if (= i door-with-car) :car :closed))
(range n))))
def
свяжет некоторое значение с переменной в текущем пространстве имен, но Вы хотите связать значение в области действия этой функции, и для этого хорошо let
. См. этот Q & A для другого объяснения.
(defn create-doors
"Create a collection of monty hall contests"
[doors contests]
(map
create-contest ;; no need to wrap create-contest in another function here
(repeat contests doors)))
Вам не нужно заключать create-contest
в другую функцию для использования с map
- вы можете просто передать функцию непосредственно в map
в качестве значения. doall
необходим только для принудительной реализации отложенной последовательности из map
, поэтому вам, вероятно, не нужно / не нужно этого внутри create-doors
.
(create-doors 4 10)
=>
((:closed :closed :car :closed)
(:closed :closed :closed :car)
(:closed :car :closed :closed)
(:closed :closed :closed :car)
(:closed :car :closed :closed)
(:closed :car :closed :closed)
(:closed :car :closed :closed)
(:closed :closed :closed :car)
(:closed :closed :car :closed)
(:closed :closed :car :closed))
при попытке получить доступ к файлу в своем комплекте приложений, необходимо получить полный путь к нему: [[NSBundle mainBundle] pathForResource: FILENAME ofType: FILEEXTENSION]
Это возвращает NSString, из которого можно вытянуть UTF8String и передать fopen.
Только быть ясным открыть файл "some.txt"...
NSString * path = [[NSBundle mainBundle] pathForResource: @"some" ofType: @"txt"];
FILE *f = fopen([path cStringUsingEncoding:1],"r");
if (f == NULL) NSLog([path stringByAppendingString:@" not found"]);