Programovací jazyk Scheme – Funkcionální programování – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Programovací jazyk Scheme – Funkcionální programování – Fórum – Programujte.comProgramovací jazyk Scheme – Funkcionální programování – Fórum – Programujte.com

 

bziba0
Duch
22. 12. 2013   #1
-
0
-

Zdravím, nemá někdo z Vás tady nějáké zkušenosti s programovacím jazykem Scheme?

Mám udělat projekt do školy, nicméně mi dělá pochopení tohoto jazyka problém (např. si němůžu zvyknout na prefixovou notaci)... a mnou naprogramované procedury pak nedělají to, co po nich chcu :( ocením každou pomoc, takže pokud někdo ví, jak se v tomhle dělá, ať čeká, že se na něj obrátím o pomoc :)

Abych uvedl příklad, máme naprogramovat predikát, který jako argument bere seznam a vrací true v případě, že je seznam liché délky (neboli má lichý počet členů - případně je prázdný) a zároveň jsou členy na sudých pozicích stejné.

Konkrétně (predikát se jmenuje interlaced?):

(interlaced? '(1 x 2 x 3)) --> true

(interlaced? '(x 1 x 2 x)) --> false

Já jsem docílil toho, že mi to vrátí true v případě, že je seznam prázdný a že mi to vrátí false když je sudé délky... nevím ale, jak tam přidat tu podmínku na porovnávání sudých členů... tuším, že v C/C++ bych věděl jak na to, ale tady jsem fakt mimo :( ...

kód, co jsem napsal (možná trochu nepřehledně)?

(define interlaced?
  (lambda (seznam)
    (cond ((null? seznam) #t)
          ((= (modulo (length seznam) 2) 0) #f)
          ((and (= (modulo (length seznam) 2) 1)))

Tenhle predikát má kontrolovat, že seznam mohl vzniknout funkcí interlace, kterou jsem naprogramoval předtím (a ta mi funguje):

(define interlace
  (lambda (seznam prvek)
    (let ((delka (length seznam))
         (delka_2 (+ (length seznam) (- (length seznam) 1))))
     (build-list delka_2
                 (lambda (i)
                   (cond ((= i 0) (list-ref seznam 0))
                         ((= (modulo i 2) 1) prvek)
                         ((= (modulo i 2) 0) (list-ref seznam (/ i 2)))))))))


Tahle fce bere dva argumenty: seznam a element. Úkolem je, aby procedura interlace vracela původní seznam, ale s tím, že za každý prvek seznamu se umístí element.

Poradí mi někdo?

Díky Bziba

Nahlásit jako SPAM
IP: 90.181.110.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

Programovací jazyk — založil Itej

Programovaci jazyk — založil marfik

Programovací jazyk — založil Dalibor

Programovací jazyk R — založil Martin

Programovací jazyk E — založil Nikol

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý