2016-10-26 3 views

ответ

2

Ну, всегда есть комбинатор решение на основе:

(str).foreach()(lam(c) => do_something(c)) 
0

следующее решение использует UnSafe но это должно быть очень легко получить доступ:

staload 
UNSAFE = 
"prelude/SATS/unsafe.sats" 

fun 
loop(p0: ptr): void = let 
    val c = $UNSAFE.ptr_get<char>p0) 
in 
    if isneqz(c) then (do_something(c); loop(ptr_succ<char>(p0)) else() 
end 

val() = loop(string2ptr(str)) 
1

следующее решение легко, доступно и не требует любые небезопасные функции (но он использует одну расширенную функцию: индексный тип строки).

fun 
loop {n:int}(p0: string(n)): void = 
if string_isnot_empty (p0) then let 
    val c = (g0ofg1)(string_head(p0)) 
    val p0 = string_tail(p0) 
in 
    do_something(c); loop(p0) 
end 

Полный код: https://glot.io/snippets/ejpwxk2xzx

+1

Обратите внимание, что 'isneqz' перегружен' string_isnot_empty'. –